العودة إلى التحديثات
New releaseAug 8, 2026

SkillSpector v2.8.2

ماسح أمني لمهارات وكلاء الذكاء الاصطناعي. يكتشف الثغرات الأمنية والأنماط الخبيثة والمخاطر الأمنية وحقن الأوامر (prompt injection) وتسريب البيانات ومخاطر سلسلة التوريد في مهارات Claude Code وCodex وMCP قبل تثبيتها.

مشاركة

SkillSpector

ماسح أمان لمهارات وكلاء الذكاء الاصطناعي. اكتشف الثغرات والأنماط الخبيثة والمخاطر الأمنية قبل تثبيت مهارات الوكيل.

Python 3.12+ License: Apache 2.0

نظرة عامة

مهارات وكلاء الذكاء الاصطناعي (المستخدمة في Claude Code وCodex CLI وGemini CLI وغيرها) تُنفَّذ بثقة ضمنية وفحص أدنى. يُظهر البحث أن 26.1% من المهارات تحتوي على ثغرات وأن 5.2% منها تُظهر نية خبيثة محتملة.

يساعدك SkillSpector على الإجابة عن السؤال: "هل هذه المهارة آمنة للتثبيت؟"

SkillSpector جزء من خط أنابيب مهارات NVIDIA الموثّقة، والذي يقوم بفحص وتقييم وتوقيع مهارات الوكيل قبل نشرها. تُنشر المهارات التي تجتاز الفحص في فهرس مهارات NVIDIA.

التوثيق

الميزات

  • إدخال متعدد الصيغ: فحص مستودعات Git، وعناوين URL، وملفات zip، وأدلة، أو ملفات فردية
  • 68 نمطًا من أنماط الثغرات عبر 17 فئة: prompt injection، data exfiltration، privilege escalation، سلسلة التوريد، الوكالة المفرطة، معالجة المخرجات، تسريب موجه النظام، تسمم الذاكرة، إساءة استخدام الأدوات، وكيل مارق، anti-refusal، إساءة استخدام المشغلات، كود خطير (AST)، تتبع التلوث، توقيعات YARA، MCP least privilege، وتسمم أدوات MCP
  • تحليل على مرحلتين: تحليل ثابت سريع + تقييم دلالي اختياري عبر LLM
  • بحث حي عن الثغرات: يستعلم SC4 من OSV.dev عن بيانات CVE في الوقت الفعلي مع رجوع تلقائي إلى وضع عدم الاتصال
  • صيغ مخرجات متعددة: تقارير طرفية وJSON وMarkdown وSARIF
  • تقييم المخاطر: درجة من 0-100 مع تسميات الخطورة وتوصيات واضحة
  • خط الأساس / كبت النتائج الإيجابية الخاطئة: قبول النتائج المعروفة عبر قاعدة glob أو خط أساس لبصمة الإصبع بحيث لا تُظهر عمليات إعادة الفحص سوى المشكلات الجديدة (التوثيق)

بدء سريع

التثبيت

إشعار البرمجيات مفتوحة المصدر: سيقوم هذا المشروع بتنزيل وتثبيت مشاريع برمجيات إضافية تابعة لجهات خارجية مفتوحة المصدر. راجع شروط ترخيص هذه المشاريع قبل الاستخدام.

أنشئ بيئة افتراضية وفعّلها أولاً (جميع أهداف make تفترض أن البيئة الافتراضية مفعّلة). استخدم uv أو pip؛ يستخدم ملف Makefile أداة uv إذا كانت متوفرة، وإلا يستخدم pip.

التثبيت السريع باستخدام uv (واجهة CLI فقط):```bash uv tool install git+https://github.com/NVIDIA/skillspector.git

Update later: uv tool update skillspector

إذا كنت تخطط لتشغيل `skillspector mcp`، فثبّت الحزمة الإضافية MCP عند التثبيت:```bash
uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'

من المصدر:```bash

Clone the repository

git clone https://github.com/NVIDIA/skillspector.git cd skillspector

Create and activate virtual environment

uv venv .venv && source .venv/bin/activate

or: python3 -m venv .venv && source .venv/bin/activate

Install for production use

make install

Or install with development dependencies

make install-dev

### Docker (لا يتطلب Python)

شغّل SkillSpector دون تثبيت Python عن طريق بنائه محليًا من [Dockerfile](https://github.com/nvidia/skillspector/blob/HEAD/Dockerfile) المرفق. الصورة مبنية على صورة Python الرسمية `3.12-slim-bookworm` من Docker.

**ابنِ الصورة:**```bash
make docker-build
# or: docker build -t skillspector .

مسح دليل محلي عن طريق تثبيت دليلك الحالي في /scan، دليل عمل الحاوية:```bash docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm

**الفحص مع تحليل LLM** عن طريق تمرير بيانات الاعتماد مع ملف `.env` محلي:```bash
cat > .env <<'EOF'
SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
EOF

الأجهزة، الأنظمة المدمجة وإنترنت الأشياء

أداةالوصفأدوات
Flipper
stars
ملعب (ومكب) للأشياء التي أصنعها أو أعدلها لجهاز Flipper Zeroعرض المزيد
Flipper-IRDB
stars
مجموعة من أكواد IR المختلفة لجهاز Flipperعرض المزيد
BT-WiFi-UAV-Invasion-FlipperZero
stars
مجموعة من السكربتات لاكتشاف وتعطيل شبكات الطائرات بدون طيار
Flipper-Xtreme
stars
الأفضل بين برمجيات Flipper Zero الثابتة. امنح جهاز Flipper القوة والحرية التي يتوق إليها.عرض المزيد
FlipperAmiibo
stars
مُصمم للاستخدام مع Flipper، فقط اسحب المجلد إلى NFC```bash
docker run --rm \
-v "$PWD:/scan" \
--env-file .env \
skillspector scan ./my-skill/
أو مرر بيانات الاعتماد مباشرة من بيئة shell الخاصة بك:```bash
docker run --rm \
  -v "$PWD:/scan" \
  -e SKILLSPECTOR_PROVIDER=anthropic \
  -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \
  skillspector scan ./my-skill/

اكتب تقريرًا إلى نظام ملفات المضيف عن طريق الكتابة إلى الدليل المُثبَّت:```bash docker run --rm
-v "$PWD:/scan"
skillspector scan ./my-skill/ --no-llm --format json --output report.json

**اسم مستعار اختياري** للفحوصات الثابتة المتكررة:```bash
alias skillspector-docker='docker run --rm -v "$PWD:/scan" skillspector'
skillspector-docker scan ./my-skill/ --no-llm

الاستخدام الأساسي```bash

Scan a local skill directory

skillspector scan ./my-skill/

Scan a single SKILL.md file

skillspector scan ./SKILL.md

Scan a Git repository

skillspector scan https://github.com/user/my-skill

Scan a zip file

skillspector scan ./my-skill.zip

#### حدود الحجم

يفرض SkillSpector حدين مستقلين على المدخلات البعيدة ومدخلات الأرشيف للحد من تأثير التنزيلات الضخمة وقنابل zip:

- **حد لكل عملية استيعاب**: `INGEST_MAX_BYTES` (100 MiB) — يُطبَّق على تنزيلات URL المتدفقة، والحجم الإجمالي غير المضغوط لأرشيفات zip، واستخدام القرص بعد الاستنساخ لمستودعات Git.
- **حد أعضاء zip**: `INGEST_MAX_ZIP_MEMBERS` (10,000) — يحد من عدد الإدخالات في ملف zip واحد.

لاحظ أن حد التحليل البالغ 1 ميغابايت لكل ملف (`MAX_FILE_BYTES`) هو حد منفصل ولاحق: فهو يحدد ما سيقرؤه كل محلل من دليل تم استيعابه بالفعل. حدود الاستيعاب أعلاه تحد من كمية المحتوى التي يمكن أن تصل إلى القرص في المقام الأول. أي خرق لأي من حدي الاستيعاب يفشل بشكل مغلق مع `IngestLimitExceededError`.

### تنسيقات الإخراج```bash
# Terminal output (default) - pretty formatted
skillspector scan ./my-skill/

# JSON output - machine readable
skillspector scan ./my-skill/ --format json --output report.json

# Markdown output - for documentation
skillspector scan ./my-skill/ --format markdown --output report.md

# SARIF output - for CI/CD integration and IDE tooling
skillspector scan ./my-skill/ --format sarif --output report.sarif

المسح المجمّع

امسح مجلدات كاملة من المهارات بالتوازي من contrib/batch_scan/:```bash python -m contrib.batch_scan.batch_scan ./my-skills/ --no-llm python -m contrib.batch_scan.batch_scan ./my-skills/ --workers 20 -f json -o report.json python -m contrib.batch_scan.batch_scan ./tests/fixtures/ -f terminal --workers 20

يدعم الكشف متعدد اللغات (zh/ja/ko) ومخرجات الطرفية/JSON/Markdown.

لعمليات فحص LLM ذات التزامن أعلى، قم بتكوين مفاتيح API متعددة وفقًا
[`.env.example`](https://github.com/nvidia/skillspector/blob/HEAD/contrib/batch_scan/.env.example) — فمجموعة المفاتيح تحسّن الإنتاجية
والمرونة، بشرط ألا تتشارك المفاتيح حد المعدل على مستوى الحساب.

راجع [دليل المساهمة](https://github.com/nvidia/skillspector/blob/HEAD/contrib/batch_scan/docs/) للتفاصيل.

> **ملاحظة حول دعم LLM:** يستهدف التكوين الافتراضي DeepSeek بصفته
> أرخص خيار متاح للعموم. من المتوقع أن يتوقف DeepSeek-Chat عن العمل
> [وفقًا للوثائق](https://api-docs.deepseek.com/)، ولا يملك المساهم عتادًا
> لاختبار النماذج المحلية. اختُبر الماسح الدفعي في الأصل مع
> نقاط نهاية متوافقة مع OpenAI — وقد استلزم افتقار DeepSeek لدعم
> المخرجات المنظمة تطبيق تصحيحات يدوية لتحليل JSON. إذا كان بإمكانك
> المساهمة بواجهة خلفية أكثر عمومية (Ollama أو vLLM أو مزوّد مختلف)،
> فإن طلبات السحب (PRs) مرحّب بها جدًا.

### قمع الإيجابيات الكاذبة (خط الأساس)

قم بقمع النتائج المعروفة/المقبولة بحيث تعكس درجة المخاطر القضايا
غير المُقيَّمة فقط، وتُظهر عمليات إعادة الفحص النتائج *الجديدة* فقط. راجع
[دليل القمع](https://github.com/nvidia/skillspector/blob/HEAD/docs/SUPPRESSION.md) للمرجع الكامل.```bash
# Accept all current findings into a baseline (run once), then commit it.
skillspector baseline ./my-skill/ -o .skillspector-baseline.yaml

# Scan against the baseline — only NEW findings are reported and scored.
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml

# Review what was suppressed (still excluded from the score).
skillspector scan ./my-skill/ --baseline .skillspector-baseline.yaml --show-suppressed

يمكن أيضًا لخط الأساس استخدام قواعد glob متسامحة مع الانحراف (حسب معرف القاعدة، أو مسار الملف، أو الرسالة) — انظر .skillspector-baseline.example.yaml. خطوط الأساس الدقيقة للبصمة مرتبطة بالأدلة: تغيير المصدر الممسوح ضوئيًا أو إصدار SkillSpector يُبقي النتيجة نشطة حتى تتم مراجعتها من جديد. عندما يتم تخزين خط أساس محدد أو مخرجات خط الأساس داخل دليل المهارة، يستثني SkillSpector ذلك الملف بالضبط من تحليل المحتوى بحيث لا يمكن لنص الإخفاء الخاص به إنشاء نتائج أو الدخول في بصمات مُعاد توليدها؛ تبقى الملفات الشقيقة ضمن نطاق الفحص العادي.

تحليل LLM

للحصول على أفضل النتائج، قم بتكوين نقطة نهاية LLM متوافقة مع OpenAI للتحليل الدلالي. اختر مزودًا عبر SKILLSPECTOR_PROVIDER؛ تتضمن المزودات المستضافة نماذج افتراضية مدمجة، بينما تتراجع مزودات CLI إلى النموذج الافتراضي لبيئة التشغيل المحلية ما لم يتم تعيين SKILLSPECTOR_MODEL. يعمل SkillSpector أيضًا مع الخوادم المحلية المتوافقة مع OpenAI (Ollama، vLLM، llama.cpp) وبوابات الاستدلال المُدارة.

المزود (SKILLSPECTOR_PROVIDER)متغير بيئة الاعتمادنقطة النهايةالنموذج الافتراضي
openaiOPENAI_API_KEY (+ اختياري OPENAI_BASE_URL)api.openai.com (أو أي عنوان URL متوافق مع OpenAI)gpt-5.4
anthropicANTHROPIC_API_KEYapi.anthropic.comclaude-opus-4-6
anthropic_proxyANTHROPIC_PROXY_API_KEY + ANTHROPIC_PROXY_ENDPOINT_URLأي بروكسي raw-predict بنمط Vertexclaude-sonnet-4-6
bedrockAWS_PROFILE (اختياري) + AWS_REGION — SigV4 عبر boto3AWS Bedrock Runtimeus.anthropic.claude-sonnet-4-6-20250915-v1:0
nv_buildNVIDIA_INFERENCE_KEYbuild.nvidia.comdeepseek-ai/deepseek-v4-flash
claude_cli(لا شيء — يستخدم مصادقة CLI المحلية)ثنائي claude المحلياحتياطي وقت تشغيل Claude المحلي، أو SKILLSPECTOR_MODEL
codex_cli(لا شيء — يستخدم مصادقة CLI المحلية)ثنائي codex المحلياحتياطي وقت تشغيل Codex المحلي، أو SKILLSPECTOR_MODEL

Stock OpenAI

export SKILLSPECTOR_PROVIDER=openai export OPENAI_API_KEY=sk-... skillspector scan ./my-skill/

Anthropic

export SKILLSPECTOR_PROVIDER=anthropic export ANTHROPIC_API_KEY=sk-ant-... skillspector scan ./my-skill/

Anthropic via Vertex-style proxy (corporate gateways, GCP Vertex AI)

export SKILLSPECTOR_PROVIDER=anthropic_proxy export ANTHROPIC_PROXY_ENDPOINT_URL=https://my-gateway.example.com/models/claude-sonnet-4-6:streamRawPredict export ANTHROPIC_PROXY_API_KEY=your-bearer-token export SKILLSPECTOR_MODEL=claude-sonnet-4-6 skillspector scan ./my-skill/

AWS Bedrock (Claude via SigV4)

export SKILLSPECTOR_PROVIDER=bedrock

Optional: select an AWS named profile. When unset, the standard

boto3 credential chain (env vars, instance metadata, SSO, etc.) resolves.

export AWS_PROFILE=my-profile

export AWS_REGION=us-west-2 # default if unset

Default model: us.anthropic.claude-sonnet-4-6-20250915-v1:0

Override with any Bedrock model ID, cross-region inference-profile

ID, or your own application-inference-profile ARN:

export SKILLSPECTOR_MODEL=us.anthropic.claude-opus-4-6-20250915-v1:0

skillspector scan ./my-skill/

NVIDIA build.nvidia.com

export SKILLSPECTOR_PROVIDER=nv_build export NVIDIA_INFERENCE_KEY=nvapi-... skillspector scan ./my-skill/

Local Claude CLI — no API key; uses your existing claude auth login session

Requires: claude CLI installed and authenticated (claude auth login)

export SKILLSPECTOR_PROVIDER=claude_cli

Uses the local Claude CLI runtime fallback unless SKILLSPECTOR_MODEL is set.

export SKILLSPECTOR_MODEL=claude-sonnet-4-6

skillspector scan ./my-skill/

Local Codex CLI — no API key; uses your existing codex login session

Requires: codex CLI installed and authenticated

export SKILLSPECTOR_PROVIDER=codex_cli skillspector scan ./my-skill/

Local Ollama or any OpenAI-compatible endpoint

export SKILLSPECTOR_PROVIDER=openai export OPENAI_API_KEY=ollama export OPENAI_BASE_URL=http://localhost:11434/v1 export SKILLSPECTOR_MODEL=llama3.1:8b skillspector scan ./my-skill/

Override the provider's default model

export SKILLSPECTOR_MODEL=gpt-5.2 skillspector scan ./my-skill/

Skip LLM analysis (faster, static analysis only)

skillspector scan ./my-skill/ --no-llm

### خادم MCP

شغّل SkillSpector كخادم [Model Context Protocol](https://modelcontextprotocol.io)
بحيث يمكن لأي وكيل يدعم MCP (Claude Code, Codex CLI, Gemini CLI) أو بيئة
تشغيل بعيدة استدعاء الفحص كأداة و**جعل تثبيت المهارات/مكونات MCP مشروطًا
بالنتيجة** — مما يحوّل SkillSpector إلى حاجز حماية وقت التشغيل بدلاً من
خطوة تدقيق خارج النطاق.

`skillspector mcp` يتطلب `skillspector[mcp]`.```bash
# Install, or reinstall if you already used the CLI-only path
uv tool install --force 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'

# FastMCP stdio transport for local CLI agents
skillspector mcp

# streamable HTTP/SSE transport for remote / A2A callers
skillspector mcp --transport http --host 127.0.0.1 --port 8000

نقل stdio هو مسار FastMCP الحالي لعملاء CLI المحليين، وما زال تعليق التهيئة المُبلَّغ عنه في issue #199 ينطبق هناك.

يُوفّر الخادم أداة واحدة:

  • scan_skill(target, use_llm=true, output_format="json") — يفحص عنوان Git URL، أو عنوان ملف URL، أو ملف .zip، أو ملف .md، أو دليلاً، ويُرجع حكمًا منظمًا: risk_score (0-100)، وseverity، وrecommendation، وsafe_to_install، وfindings. كما يُبلّغ عن llm_used / scan_mode بحيث لا يُؤخذ أبدًا انخفاض النتيجة من فحص ثابت فقط على أنه فحص كامل نظيف.

سجّله مع Claude Code عبر:```bash claude mcp add skillspector -- skillspector mcp

> **الأمان — نموذج الثقة في نقل HTTP**
>
> يأتي نقل HTTP **بدون مصادقة**. يمكن لأي متصل يصل إلى المنفذ أن
> يستدعي `scan_skill`. عبر stdio أو `127.0.0.1`، تُعد هذه
> نفس حدود الثقة الخاصة بالـ CLI. إذا قمت بالربط بواجهة قابلة للتوجيه:
>
> - ضع الخادم خلف وكيل عكسي للمصادقة (مثل nginx + mTLS)
>   قبل تعريضه خارجيًا.
> - تُرفض المسارات المحلية وعناوين `file://` **تلقائيًا** عبر HTTP لمنع
>   المتصلين غير الموثقين من قراءة ملفات المضيف العشوائية. يتم قبول
>   عناوين Git البعيدة وعناوين `.zip` فقط.

## أنماط الثغرات

يكتشف SkillSpector **68 نمطًا من أنماط الثغرات** عبر 17 فئة:

### حقن المطالبات (5 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| P1 | تجاوز التعليمات | عالية | أوامر لتجاهل قيود السلامة |
| P2 | تعليمات مخفية | عالية | توجيهات خبيثة في التعليقات/النص غير المرئي |
| P3 | أوامر الاستخراج | عالية | تعليمات لنقل السياق خارجيًا |
| P4 | التلاعب بالسلوك | متوسطة | تعليمات خفية تغيّر قرارات الوكيل |
| P5 | محتوى ضار | حرجة | تعليمات قد تسبب ضررًا جسديًا |

### مكافحة الرفض (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| AR1 | قمع الرفض | عالية | تعليمات بعدم الرفض أبدًا أو الامتثال دائمًا (مثل "لا ترفض أبدًا"، "امتثل دائمًا") |
| AR2 | قمع إخلاء المسؤولية | عالية | تعليمات لحذف التحذيرات أو إخلاءات المسؤولية أو التعليقات الأخلاقية (مثل "لا إخلاءات مسؤولية"، "لا تَعِظ") |
| AR3 | إبطال سياسة السلامة | عالية | تأطير كسر القيود (jailbreak) يُبطل الحواجز الوقائية (مثل "لا توجد لديك قيود"، "تجاهل إرشاداتك"، "افعل أي شيء الآن") |

### استخراج البيانات (4 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| E1 | إرسال خارجي | متوسطة | إرسال البيانات إلى عناوين URL خارجية |
| E2 | جمع متغيرات البيئة | عالية | جمع مفاتيح API والأسرار |
| E3 | تعداد نظام الملفات | متوسطة | فحص الدلائل بحثًا عن ملفات حساسة |
| E4 | تسرب السياق | عالية | نقل سياق المحادثة خارجيًا |

### تصعيد الامتيازات (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| PE1 | أذونات مفرطة | منخفضة | طلب وصول يتجاوز الوظيفة المعلنة |
| PE2 | تنفيذ Sudo/Root | متوسطة | استدعاء امتيازات نظام مرتفعة |
| PE3 | الوصول إلى بيانات الاعتماد | عالية | قراءة مفاتيح SSH والرموز وكلمات المرور |

### سلسلة التوريد (6 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| SC1 | تبعيات بدون تحديد إصدار | منخفضة | لا توجد قيود إصدار على الحزم |
| SC2 | جلب نصوص برمجية خارجية | عالية | curl \| bash وتنفيذ كود عن بُعد |
| SC3 | كود مُعمّى | عالية | تنفيذ عبر Base64/hex |
| SC4 | تبعيات معروفة الثغرات | عالية | تبعيات تحتوي CVEs معروفة (بحث مباشر في OSV.dev) |
| SC5 | تبعيات مهجورة | متوسطة | حزم غير مُدارة بدون تحديثات أمنية |
| SC6 | انتحال الأسماء | عالية | أسماء حزم مشابهة لحزم شهيرة |

### الوكالة المفرطة (4 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| EA1 | وصول غير مقيد للأدوات | عالية | وصول حر للأدوات بدون قيود |
| EA2 | اتخاذ قرارات ذاتي | عالية | قرارات عالية التأثير بدون تدخل بشري |
| EA3 | توسع النطاق | متوسطة | قدرات تتجاوز الغرض المعلن |
| EA4 | وصول غير محدود للموارد | متوسطة | لا حدود للمعدل أو حصص لاستهلاك الموارد |

### معالجة المخرجات (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| OH1 | حقن مخرجات غير مُتحقق منها | عالية | مخرجات النموذج مستخدمة بدون تنظيف |
| OH2 | مخرجات عابرة للسياقات | متوسطة | تدفق المخرجات عبر حدود الثقة بدون تحقق |
| OH3 | مخرجات غير محدودة | متوسطة | لا حدود لحجم المخرجات أو معدل التوليد |

### تسريب المطالبة النظامية (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| P6 | تسرب مباشر | عالية | تعليمات تكشف المطالبات النظامية أو القواعد الداخلية |
| P7 | استخراج غير مباشر | متوسطة | استخراج عبر إعادة الصياغة أو الترجمة أو القنوات الجانبية |
| P8 | استخراج قائم على الأدوات | عالية | مطالبات نظامية تُستخرج عبر كتابة الملفات أو طلبات الشبكة |

### تسميم الذاكرة (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| MP1 | حقن سياق مستمر | عالية | محتوى مصمم للاستمرار عبر التفاعلات |
| MP2 | حشو نافذة السياق | متوسطة | محتوى حشو يزيح قيود السلامة |
| MP3 | التلاعب بالذاكرة | عالية | العبث بذاكرة الوكيل أو الحالة المخزنة |

### إساءة استخدام الأدوات (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TM1 | إساءة استخدام معاملات الأداة | عالية | معاملات مصممة لسلوك غير مقصود (shell=True, --force) |
| TM2 | إساءة استخدام التسلسل | عالية | سلاسل أدوات تتجاوز فحوصات السلامة الفردية |
| TM3 | إعدادات افتراضية غير آمنة | متوسطة | إعدادات افتراضية متساهلة بشكل مفرط (تعطيل TLS، بدون مصادقة) |

### الوكيل المارق (2 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| RA1 | تعديل ذاتي | حرجة | تعديل الكود أو الإعدادات الخاصة أثناء التشغيل |
| RA2 | استمرار الجلسة | عالية | استمرار غير مصرح به عبر مهام cron أو نصوص بدء التشغيل |

### إساءة استخدام المشغلات (3 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TR1 | مشغل واسع النطاق بشكل مفرط | متوسطة | أنماط مشغلات تطابق كلمات شائعة |
| TR2 | مشغل أوامر الظل | عالية | مشغلات تحجب الأوامر المدمجة أو المهارات الأخرى |
| TR3 | مشغل إغراء بالكلمات المفتاحية | متوسطة | مشغلات عامة مصممة لتعظيم التنشيط |

### AST السلوكي (9 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| AST1 | استدعاء exec() | حرجة | exec() مباشر يُمكّن تنفيذ كود عشوائي |
| AST2 | استدعاء eval() | عالية | eval() مباشر يقيّم تعبيرات عشوائية |
| AST3 | استيراد ديناميكي | عالية | استيراد وحدات عشوائية وقت التشغيل عبر \_\_import\_\_() |
| AST4 | استدعاء subprocess | عالية | تنفيذ أوامر خارجية عبر subprocess |
| AST5 | os.system / عائلة exec | عالية | أوامر shell عبر وحدة os |
| AST6 | استدعاء compile() | متوسطة | إنشاء كائنات كود من سلاسل نصية |
| AST7 | getattr() ديناميكي | متوسطة | وصول عشوائي للخصائص بأسماء غير حرفية |
| AST8 | سلسلة تنفيذ خطيرة | حرجة | دمج exec/eval مع مصدر ديناميكي (شبكة، بيانات مشفرة) |
| AST9 | مصرف getattr() انعكاسي | عالية | exec انعكاسي عبر `getattr(os,'system')` / `getattr(builtins,'exec')` يتهرب من AST1/AST5 |

### تتبع التلوث (5 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TT1 | تدفق تلوث مباشر | عالية | تدفق البيانات مباشرة من مصدر إلى مصرف بدون تنظيف |
| TT2 | تدفق تلوث عبر متغيرات وسيطة | متوسطة | تدفق البيانات من المصدر إلى المصرف عبر متغيرات وسيطة |
| TT3 | سلسلة استخراج بيانات الاعتماد | حرجة | تدفق بيانات الاعتماد (متغيرات البيئة، الأسرار) إلى مصارف مخرجات الشبكة |
| TT4 | قراءة ملف إلى استخراج عبر الشبكة | عالية | تدفق محتويات الملفات إلى مصارف مخرجات الشبكة |
| TT5 | مدخلات خارجية إلى تنفيذ كود | حرجة | تدفق مدخلات الشبكة أو المستخدم إلى مصارف exec/eval/subprocess |

### توقيعات YARA (4 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| YR1 | تطابق برمجيات خبيثة | حرجة | تطابق قاعدة YARA لتوقيعات برمجيات خبيثة معروفة |
| YR2 | تطابق ويب شيل | حرجة | تطابق قاعدة YARA لأنماط ويب شيل |
| YR3 | تطابق مُعدِّن العملات المشفرة | عالية | تطابق قاعدة YARA لمؤشرات تعدين العملات المشفرة |
| YR4 | تطابق أدوات الاختراق / الاستغلال | عالية | تطابق قاعدة YARA لأدوات الاختراق أو كود الاستغلال |

### الامتياز الأقل في MCP (4 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| LP1 | قدرة غير معلنة بالكامل | عالية | الكود يستخدم قدرات غير مدرجة في الأذونات المعلنة |
| LP2 | إذن بحرف بدل | متوسطة | قائمة الأذونات تحتوي على أحرف بدل (\*, all, full, any) |
| LP3 | إعلان إذن مفقود | متوسطة | لا يوجد حقل أذونات لكن الكود يحتوي على قدرات قابلة للاكتشاف |
| LP4 | إذن مُعلن بشكل زائد | منخفضة | تم الإعلان عن إذن دون العثور على قدرة كود مقابلة |

### تسميم أدوات MCP (4 أنماط)

| المعرّف | النمط | الخطورة | الوصف |
|----|---------|----------|-------------|
| TP1 | تعليمات مخفية | عالية | توجيهات مخفية في البيانات الوصفية (تعليقات HTML، أحرف بعرض صفري، base64، data URIs) |
| TP2 | خداع Unicode | عالية | رموز متشابهة (homoglyphs)، تجاوزات RTL، معرّفات مختلطة النصوص في البيانات الوصفية للأداة |
| TP3 | حقن وصف المعاملات | متوسطة | أنماط حقن في تعريفات المعاملات (تجاوزات، رموز نظام، إعدادات افتراضية خبيثة) |
| TP4 | عدم تطابق الوصف مع السلوك | متوسطة | وصف الأداة المُعلن لا يطابق سلوك الكود الفعلي (مدعوم بالـ LLM) |

جميع الأنماط المكتشفة مدرجة في الجداول أعلاه.

## تسجيل المخاطر

### حساب النتيجة

- **الثغرات الحرجة**: +50 نقطة
- **الثغرات عالية الخطورة**: +25 نقطة
- **الثغرات متوسطة الخطورة**: +10 نقاط
- **الثغرات منخفضة الخطورة**: +5 نقاط
- **النصوص البرمجية القابلة للتنفيذ**: مضاعف 1.3x

### مستويات الخطورة

| النتيجة | الخطورة | التوصية |
|-------|----------|----------------|
| 0-20 | منخفضة | آمن |
| 21-50 | متوسطة | حذر |
| 51-80 | عالية | لا تقم بالتثبيت |
| 81-100 | حرجة | لا تقم بالتثبيت |

## مثال على المخرجات

### مخرجات الطرفية```
 SkillSpector Security Report  v2.0.0

Skill: suspicious-skill
Source: ./suspicious-skill/
Scanned: 2026-01-29 10:30:00 UTC

        Risk Assessment
 Metric          Value
 Score           78/100
 Severity        HIGH
 Recommendation  DO NOT INSTALL

        Components (3)
 File              Type      Lines  Executable
 SKILL.md          markdown    142  No
 scripts/sync.py   python       87  Yes
 requirements.txt  text          3  No

Issues (2)

  HIGH: Env Variable Harvesting (E2)
    Location: scripts/sync.py:23
    Finding: for key, val in os.environ.items():...
    Confidence: 94%
    Explanation: This code collects environment variables containing
    API keys and secrets, then sends them to an external server.

  HIGH: External Transmission (E1)
    Location: scripts/sync.py:45
    Finding: requests.post("https://api.skill.io/env"...
    Confidence: 89%
    Explanation: Data is being sent to an external server. Combined
    with env harvesting above, this indicates credential exfiltration.

الإعدادات

متغيرات البيئة

المتغيرالوصفمطلوب
SKILLSPECTOR_PROVIDERمزوّد LLM النشط: openai، anthropic، anthropic_proxy، bedrock، nv_build، claude_cli، codex_cli، أو gemini_cli. تستخدم المزوّدات المستضافة الإعدادات الافتراضية المضمّنة في model_registry.yaml؛ بينما يلجأ claude_cli و codex_cli إلى النموذج الافتراضي لبيئة سطر الأوامر المحلية ما لم يتم تعيين SKILLSPECTOR_MODEL. القيمة الافتراضية هي nv_build.اختياري
NVIDIA_INFERENCE_KEYبيانات اعتماد لمزوّد nv_build (build.nvidia.com).مطلوب لتحليل LLM عندما يكون SKILLSPECTOR_PROVIDER=nv_build
OPENAI_API_KEYبيانات اعتماد لمزوّد OpenAI (SKILLSPECTOR_PROVIDER=openai). كما تعمل كخيار احتياطي من المستوى الثاني في تسلسل بيانات الاعتماد عندما لا يُرجع المزوّد النشط أي بيانات اعتماد.مطلوب لتحليل LLM عندما يكون SKILLSPECTOR_PROVIDER=openai
OPENAI_BASE_URLيتجاوز نقطة نهاية OpenAI (مثل توجيهها إلى Ollama).اختياري
SKILLSPECTOR_REASONING_EFFORTإعداد اختياري لمقدار جهد الاستدلال يعتمد على المزوّد والنموذج. تُزال المسافات الزائدة من القيم غير الفارغة وتُمرَّر كما هي دون تغيير؛ بينما يؤدي عدم التعيين أو القيمة الفارغة إلى الحفاظ على السلوك الافتراضي للمزوّد.اختياري
ANTHROPIC_API_KEYبيانات اعتماد لمزوّد Anthropic (SKILLSPECTOR_PROVIDER=anthropic).مطلوب لتحليل LLM عندما يكون SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_BASE_URLيتجاوز نقطة نهاية Anthropic الأصلية (الافتراضي: https://api.anthropic.com).اختياري
ANTHROPIC_PROXY_ENDPOINT_URLعنوان نقطة نهاية كامل لمزوّد وكيل Anthropic (raw-predict بنمط Vertex).مطلوب عندما يكون SKILLSPECTOR_PROVIDER=anthropic_proxy
ANTHROPIC_PROXY_API_KEYرمز Bearer لمزوّد وكيل Anthropic.مطلوب عندما يكون SKILLSPECTOR_PROVIDER=anthropic_proxy
ANTHROPIC_PROXY_API_VERSIONقيمة anthropic_version المُرسلة في نص الطلب (الافتراضي: vertex-2023-10-16).اختياري
AWS_PROFILEملف تعريف AWS مسمّى لمزوّد Bedrock — تتم المصادقة عبر SigV4 من خلال boto3. عند عدم تعيينه، يتم حل سلسلة بيانات الاعتماد القياسية لـ boto3 (متغيرات البيئة، بيانات التعريف الخاصة بالمثيل، SSO، إلخ).اختياري (يُستخدم عندما يكون SKILLSPECTOR_PROVIDER=bedrock)
AWS_REGIONمنطقة AWS لنقطة نهاية Bedrock Runtime. القيمة الافتراضية هي us-west-2.اختياري (يُستخدم عندما يكون SKILLSPECTOR_PROVIDER=bedrock)
SKILLSPECTOR_MODELيتجاوز نموذج المزوّد النشط. بالنسبة للمزوّدات المستضافة، يستبدل هذا الإعداد النموذج الافتراضي المضمّن من جدول تحليل LLM. بالنسبة إلى claude_cli و codex_cli، يتم تمريره كـ --model بدلاً من استخدام النموذج الاحتياطي لبيئة سطر الأوامر المحلية.اختياري
SKILLSPECTOR_MODEL_REGISTRYيتجاوز سجل YAML المضمّن لكل مزوّد (src/skillspector/providers/<provider>/model_registry.yaml) بمسار مخصص.اختياري
SKILLSPECTOR_LOG_LEVELمستوى السجل: DEBUG, INFO, WARNING, ERROR (الافتراضي: WARNING).اختياري

مزوّدات CLI (claude_cli, codex_cli): لا حاجة إلى مفتاح API. تتم إدارة المصادقة بالكامل عبر جلسة تسجيل الدخول الخاصة بواجهة CLI للوكيل (claude auth login / codex login). لا يقرأ SkillSpector مفاتيح API ولا يمررها أبدًا عندما تكون هذه المزوّدات نشطة. يتم تشغيل العملية الفرعية في وضع حماية مُحصّن: الأدوات معطلة، لا يوجد MCP، وضع الحماية للقراءة فقط (codex)، ولا يتم تسليم محتوى المهارات غير الموثوق إلا عبر stdin.

خيارات CLI```bash

skillspector scan --help

Options: -f, --format [terminal|json|markdown|sarif] Output format [default: terminal] -o, --output PATH Output file path --no-llm Skip LLM analysis (static only) --yara-rules-dir PATH Extra YARA rules directory -b, --baseline PATH Suppress findings listed in a baseline --show-suppressed List baseline-suppressed findings -V, --verbose Show detailed progress --help Show this message and exit

Generate a baseline of all current findings (see docs/SUPPRESSION.md)

skillspector baseline [-o FILE] [--no-llm] [--reason TEXT]

## دمج SkillSpector

صُمم SkillSpector ليكون مدفوعًا بأدوات أخرى (خطوط CI، بوابات التثبيت، تكاملات المحرر). رمز الخروج ومخرج JSON هما عقد مستقر.

### رموز الخروج

يُرجع `skillspector scan` الرموز التالية:

| الرمز | المعنى |
|------|---------|
| `0` | اكتمل الفحص، `risk_score` ≤ 50 (التوصية `SAFE` أو `CAUTION`) |
| `1` | اكتمل الفحص، `risk_score` > 50 (التوصية `DO_NOT_INSTALL`) |
| `2` | خطأ (مدخلات غير صالحة، مصدر غير قابل للقراءة، فشل داخلي) |

> يدمج رمز الخروج `SAFE` و `CAUTION` في `0`. للتصرف بشكل مختلف معهما (مثل *التحذير* عند `CAUTION` ولكن *المنع* عند `DO_NOT_INSTALL`)، اقرأ حقل `recommendation` من مخرج JSON بدلاً من الاعتماد على رمز الخروج.

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

يُنتج `--format json` تقرير JSON؛ وفي حال عدم تحديد `--output`/`-o` تتم كتابته إلى stdout:```bash
skillspector scan ./my-skill/ --format json

الشكل العام هو (يوضح هذا المثال فحصًا كاملًا مدعومًا بـ LLM؛ مع --no-llm، يكون metadata.llm_requested هو false):```json { "skill": { "name": "...", "source": "...", "scanned_at": "<ISO 8601>" }, "risk_assessment": { "score": 0, "severity": "LOW", "recommendation": "SAFE" }, "components": [ { "path": "...", "type": "...", "lines": 0, "executable": false, "size_bytes": 0 } ], "issues": [ { "id": "...", "category": "...", "severity": "...", "confidence": 0.0, "location": { "file": "...", "start_line": 0 } } ], "metadata": { "has_executable_scripts": false, "skillspector_version": "...", "llm_requested": true, "llm_available": true, "inference_usage": [ { "node": "semantic_security_discovery", "request_kind": "structured_output", "provider": "anthropic", "model": "claude-opus-4-6", "model_source": "provider_response", "usage_source": "provider_response", "prompt_tokens": 1000, "completion_tokens": 100, "cached_tokens": 400, "cache_write_tokens": 50, "total_tokens": 1100 } ] } }

- `risk_assessment.severity` ∈ `LOW | MEDIUM | HIGH | CRITICAL`.
- `risk_assessment.recommendation` ∈ `SAFE | CAUTION | DO_NOT_INSTALL`، مُعيَّنة من الخطورة: `LOW → SAFE`، `MEDIUM → CAUTION`، `HIGH`/`CRITICAL → DO_NOT_INSTALL`.
- يظهر `metadata.llm_error` فقط عندما يكون تحليل LLM مطلوبًا ولكنه غير متوفر.
- يحتوي `metadata.inference_usage` على سجل واحد مُنقّح لكل استجابة LLM عندما
  يكشف المزوّد عدّادات التوكن. وتكون قائمة فارغة عندما تكون الاستخدامات غير متاحة؛
  لا يقدّر SkillSpector أبدًا الرموز المفقودة. إجماليات المطالبات تشمل قراءات وكتابات ذاكرة التخزين
  المؤقت بحيث يمكن للتسعير النهائي فصل تلك الأقسام بأمان.
  يميّز `model_source` نموذج المزوّد المحدّد بشكل مستقل عن
  النموذج المطلوب بالضبط المستخدم عندما تكون هوية الاستجابة غائبة أو غامضة.
  لا يرسل SkillSpector حاليًا عناصر تحكم ذاكرة التخزين المؤقت للمطالبات الخاصة بـ Anthropic، لذلك
  لا يمكن لطلبات الفحص الخاصة به تحديد مستويات كتابة ذاكرة التخزين المؤقت المنفصلة (5 دقائق أو ساعة)؛
  يتم تطبيع حقول الاستجابة الخاصة بـ TTL بشكل دفاعي في العداد الإجمالي لكتابة ذاكرة التخزين المؤقت.
- انظر [Inference usage telemetry](https://github.com/nvidia/skillspector/blob/HEAD/docs/INFERENCE_USAGE.md) للحصول على كامل
  مصدر البيانات، ومحاسبة ذاكرة التخزين المؤقت، والخصوصية، والاستيعاب المغلق عند الفشل، وعقد
  التسعير النهائي.
- يتم تعريف الشكل الكامل لكل مشكلة بواسطة `Finding.to_dict()` في [models.py](https://github.com/nvidia/skillspector/blob/HEAD/src/skillspector/models.py)؛ اعتمد على الحقول أعلاه وتعامل مع أي حقول إضافية على أنها أفضل جهد.

بالنسبة لأدوات CI/IDE، يُصدر `--format sarif` تنسيق SARIF 2.1.0.

### تعيين البوابة الموصى به

عند استخدام SkillSpector كبوابة تثبيت، اربط التوصية بإجراء:

| `recommendation` | الإجراء المقترح |
|------------------|------------------|
| `SAFE` | السماح |
| `CAUTION` | مطالبة / تحذير المستخدم |
| `DO_NOT_INSTALL` | حظر |

يحسب SkillSpector نطاق الدرجة والتوصية؛ ومدى صرامة البوابة (مثل ما إذا كان `CAUTION` يحظر في CI) هو قرار سياسة للأداة المدمجة.

## التطوير

### الإعداد

تفترض جميع أهداف `make` أن بيئة افتراضية قد تم إنشاؤها وتفعيلها بالفعل. يستخدم ملف Makefile أداة **uv** إذا كانت متاحة، وإلا **pip**.```bash
# Clone, create venv, activate, install dev dependencies
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
# or: python3 -m venv .venv && source .venv/bin/activate
make install-dev

# Run tests
make test

# Run tests with coverage
make test-cov

# Run linting
make lint

# Format code
make format

كيف يعمل

يستخدم SkillSpector خط أنابيب كشف من مرحلتين:

المرحلة 1: التحليل الثابت

  • مطابقة أنماط سريعة قائمة على التعبيرات النمطية عبر 11 محللًا ثابتًا
  • تحليل سلوكي قائم على AST لاكتشاف الاستدعاءات الخطيرة (exec, eval, subprocess, إلخ.)
  • بحث مباشر عن الثغرات عبر OSV.dev للـ CVEs المعروفة في التبعيات
  • يفحص جميع الملفات المؤهلة للمحللين في المهارة
  • استرجاع مرتفع (يلتقط معظم المشكلات)
  • دقة معتدلة (بعض الإيجابيات الكاذبة)

يتم الاحتفاظ بتوقيع صالح على مستوى الجذر من OpenSSF Model Signing (skill.oms.sig) في جرد المكونات كنوع oms_signature، لكنه مستبعد من تحليل المحتوى الثابت وتحليل LLM. تحتوي حزم OMS بالضرورة على حقول حمولة وتوقيع وشهادة طويلة بترميز base64؛ وإلا فقد تخطئ فحوصات التعليمات البرمجية المبهمة العامة في تصنيف هذه الحقول كمحتوى تنفيذي مخفي. يتحقق المكتشف من بنية OMS DSSE/in-toto الدنيا؛ ولا يتحقق من التوقيع، أو سلسلة الشهادات، أو إدخال سجل الشفافية، أو هوية الموقّع. يتم فحص ملفات التوقيع غير الصالحة أو غير المعروفة بشكل طبيعي.

المرحلة 2: التحليل الدلالي باستخدام LLM (اختياري)

  • تقييم السياق والنية
  • تصفية الإيجابيات الكاذبة
  • تقديم تفسيرات قابلة للقراءة البشرية
  • تحسين الدقة إلى ~87%

تتضمن مطالبة LLM حمايات مضادة لكسر الحماية لمنع المهارات الخبيثة من التلاعب بالتحليل.

البحث المباشر عن الثغرات (SC4)

يستخدم SC4 واجهة برمجة تطبيقات OSV.dev للتحقق من التبعيات مقابل قاعدة بيانات الثغرات مفتوحة المصدر الكاملة — التي تغطي عشرات الآلاف من النشرات الاستشارية عبر PyPI وnpm.

  • لا يتطلب مفتاح API — OSV.dev مجاني وغير مصادق عليه.
  • استعلامات مجمعة — يتم فحص جميع التبعيات في استدعاء HTTP واحد.
  • تراجع تلقائي — إذا تعذر الوصول إلى OSV.dev (منفصل عن الشبكة/بدون اتصال)، يتم استخدام قائمة تراجع مدمجة صغيرة.
  • التخزين المؤقت — يتم تخزين النتائج مؤقتًا في الذاكرة لمدة ساعة واحدة لتجنب استدعاءات API المتكررة أثناء الجلسة.

تتطلب الأداة وصول HTTPS صادرًا إلى api.osv.dev للحصول على بيانات الثغرات المباشرة. وعندما لا يكون ذلك متاحًا، تقتصر النتائج على قائمة التراجع الثابتة.

نموذج الثقة وإخراج البيانات

SkillSpector هو دفاع متعدد الطبقات، وليس صندوق رمل. اعرف ما يفعله وما لا يفعله قبل الاعتماد عليه:

  • لا يقوم أبدًا بتنفيذ المهارة المفحوصة. جميع التحليلات ثابتة (regex, Python AST, YARA) بالإضافة إلى تقييم اختياري عبر LLM لـ محتوى الملف — لا يتم تشغيل كود المهارة أبدًا.
  • يرسل تحليل LLM محتويات الملفات المؤهلة للمحللين إلى المزود المكوّن. عندما يكون تحليل LLM مفعّلاً (الافتراضي)، يتم إرسال محتويات الملفات إلى نقطة نهاية SKILLSPECTOR_PROVIDER النشطة. يتم استبعاد ملفات توقيع OMS المعروفة. استخدم --no-llm لإبقاء المحتويات محلية (تحليل ثابت فقط).
  • يرسل SC4 أسماء التبعيات إلى OSV.dev. يستعلم فحص سلسلة التوريد من OSV.dev بأسماء وإصدارات الحزم التي تعلنها المهارة للبحث عن CVEs المعروفة. هذا أساسي للفحص ويتم تنفيذه حتى مع --no-llm. يرسل إحداثيات التبعيات (وليس محتويات الملفات)، ولا يتطلب مفتاح API، ويعود إلى قائمة مدمجة عندما يتعذر الوصول إلى OSV.dev.
  • لا يعزل المضيف في صندوق رمل. يضع SkillSpector علامات على الأنماط الخطيرة قبل تثبيت المهارة؛ فهو لا يحتوي أو يعزل مهارة تختار تثبيتها على أي حال.

القيود

  • المحتوى غير الإنجليزي: قد يفوت أنماطًا بلغات أخرى
  • الهجمات القائمة على الصور: لا يمكنه تحليل النصوص في الصور
  • الكود المشفر/الثنائي: لا يمكنه تحليل المحتوى المترجم أو المشفر
  • سلوك وقت التشغيل: تحليل ثابت فقط، بدون تنفيذ ديناميكي
  • SC4 دون اتصال: بدون وصول شبكة إلى api.osv.dev، يستخدم SC4 قائمة تراجع ثابتة صغيرة

الخلفية البحثية

استنادًا إلى بحث من "Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale" (Liu وآخرون، 2026):

  • مجموعة البيانات: 42,447 مهارة من الأسواق الرئيسية
  • المعرضة للخطر: 26.1% تحتوي على ثغرة واحدة على الأقل
  • عالية الخطورة: 5.2% تُظهر نية خبيثة محتملة
  • النتيجة الرئيسية: المهارات التي تحتوي على سكربتات قابلة للتنفيذ أكثر عرضة للثغرات بمقدار 2.12 مرة

التكامل مع Python API```python

from skillspector import graph

Invoke the LangGraph workflow

result = graph.invoke({ "input_path": "/path/to/skill", "output_format": "json", # terminal, json, markdown, or sarif "use_llm": True, # False for static-only analysis })

Access results

print(f"Risk Score: {result['risk_score']}/100") print(f"Severity: {result['risk_severity']}") print(f"Recommendation: {result['risk_recommendation']}")

for finding in result["filtered_findings"]: print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")

## الترخيص

Apache License 2.0 - انظر [LICENSE](https://github.com/nvidia/skillspector/blob/HEAD/LICENSE) للتفاصيل.

## المساهمة

المساهمات مرحب بها! يرجى قراءة إرشادات المساهمة لدينا وإرسال طلبات السحب (pull requests).

## الدعم

- **المشكلات**: [GitHub Issues](https://github.com/NVIDIA/skillspector/issues)

الفئات