Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

نظرة عامة على الأدوات

الأدوات هي القدرات التي يستطيع وكيل PRX استدعاءها أثناء حلقة الاستدلال. عندما يقرر LLM أنه يحتاج تنفيذ إجراء، مثل تشغيل أمر أو قراءة ملف أو البحث في الويب أو تخزين ذاكرة، فإنه يستدعي أداة بالاسم مع معاملات JSON منظّمة. ينفذ PRX الأداة، ويطبق سياسات الأمان، ثم يعيد النتيجة إلى LLM للخطوة التالية.

يأتي PRX مع 46+ أداة مدمجة ضمن 12 فئة، من إدخال/إخراج الملفات الأساسي إلى أتمتة المتصفح وتفويض المهام متعددة الوكلاء وتكامل بروتوكول MCP.

معمارية الأدوات

كل أداة تطبق trait باسم Tool:

rust
#[async_trait]
pub trait Tool: Send + Sync {
    fn name(&self) -> &str;
    fn description(&self) -> &str;
    fn parameters_schema(&self) -> serde_json::Value;
    async fn execute(&self, args: serde_json::Value) -> Result<ToolResult>;
}

كل أداة توفّر JSON Schema لمعلماتها، ويُرسل هذا المخطط إلى LLM كتعريف دالة. ينشئ LLM استدعاءات منظّمة، ويتحقق PRX من صحة المعاملات مقابل المخطط قبل التنفيذ.

سجل الأدوات: default_tools() مقابل all_tools()

يستخدم PRX نظام تسجيل بطبقتين:

default_tools() -- النواة الدنيا (3 أدوات)

مجموعة الأدوات الدنيا للوكلاء الخفيفين أو المقيّدين. متاحة دائمًا دون إعداد إضافي:

الأداةالوصف
shellتنفيذ أوامر shell داخل sandbox
file_readقراءة محتوى الملفات (مع مراعاة ACL)
file_writeكتابة المحتوى إلى الملفات

all_tools() -- السجل الكامل (46+ أداة)

مجموعة الأدوات الكاملة المبنية حسب إعدادك. تُسجّل الأدوات بشكل شرطي بناءً على الميزات المفعّلة:

  • تُسجّل دائمًا: الأدوات الأساسية، الذاكرة، cron، الجدولة، git، الرؤية، nodes، pushover، canvas، proxy config، schema.
  • تُسجّل بشروط: browser (يتطلب browser.enabled) وHTTP requests (يتطلب http_request.enabled) وweb search (يتطلب web_search.enabled) وweb fetch (يتطلب web_search.fetch_enabled + browser.allowed_domains) وMCP (يتطلب mcp.enabled) وComposio (يتطلب API key) وdelegate/agents_list (يتطلب تعريفات وكلاء).

مرجع الفئات

Core (3 أدوات) -- متاحة دائمًا

أدوات الأساس الموجودة في default_tools() وall_tools().

الأداةالوصف
shellتنفيذ أوامر shell بعزل sandbox قابل للتهيئة (Landlock/Firejail/Bubblewrap/Docker) مع مهلة 60 ثانية وحد إخراج 1MB وتنقية للبيئة.
file_readقراءة الملفات مع التحقق من المسار. عند تفعيل ACL للذاكرة يتم حظر ملفات markdown الخاصة بالذاكرة.
file_writeكتابة المحتوى إلى الملفات مع تطبيق فحوص سياسة الأمان.

Memory (5 أدوات)

عمليات الذاكرة طويلة الأمد لتخزين معرفة الوكيل واسترجاعها وإدارتها.

الأداةالوصف
memory_storeتخزين حقائق أو تفضيلات أو ملاحظات في الذاكرة طويلة الأمد. يدعم core وdaily وconversation أو فئات مخصصة.
memory_forgetحذف إدخالات محددة من الذاكرة طويلة الأمد.
memory_getاسترجاع إدخال ذاكرة محدد بالمفتاح (مع مراعاة ACL عند التفعيل).
memory_recallاسترجاع ذكريات بالكلمات المفتاحية أو التشابه الدلالي. تُعطل عند تفعيل ACL للذاكرة.
memory_searchبحث نصي ومتجهي عبر إدخالات الذاكرة (مع مراعاة ACL عند التفعيل).

Cron / Scheduling (9 أدوات)

أتمتة المهام الزمنية ومحرك جدولة Xin.

الأداةالوصف
cronنقطة دخول cron القديمة لإنشاء وإدارة المهام المجدولة.
cron_addإضافة وظيفة cron جديدة بتعبير cron وأمر ووصف اختياري.
cron_listعرض جميع وظائف cron المسجلة مع الجداول والحالة.
cron_removeحذف وظيفة cron عبر المعرف.
cron_updateتحديث جدول وظيفة cron أو أمرها أو إعداداتها.
cron_runتشغيل وظيفة cron يدويًا فورًا.
cron_runsعرض سجل التنفيذ والـ logs الخاصة بتشغيلات cron.
scheduleجدولة مهمة لمرة واحدة أو متكررة بتعابير زمنية بلغة طبيعية.
xinمحرك جدولة Xin لجدولة متقدمة بسلاسل اعتماد وتنفيذ شرطي.

Browser / Vision (5 أدوات)

أتمتة الويب ومعالجة الصور. أدوات المتصفح تتطلب [browser] enabled = true.

الأداةالوصف
browserأتمتة متصفح كاملة مع backends قابلة للتبديل (agent-browser CLI وRust-native وcomputer-use sidecar).
browser_openفتح URL في المتصفح بشكل بسيط مع تقييد النطاق عبر browser.allowed_domains.
screenshotالتقاط لقطات شاشة للشاشة الحالية أو نوافذ محددة.
imageمعالجة وتحويل الصور (تغيير الحجم، القص، تحويل الصيغ).
image_infoاستخراج بيانات metadata وأبعاد ملفات الصور.

Network (4 أدوات)

طلبات HTTP، والبحث في الويب، وجلب صفحات الويب، وتكامل بروتوكول MCP.

الأداةالوصف
http_requestتنفيذ طلبات HTTP إلى APIs. الوصول مرفوض افتراضيًا إلا للنطاقات ضمن allowed_domains.
web_search_toolالبحث في الويب عبر DuckDuckGo (مجاني) أو Brave Search (يتطلب API key).
web_fetchجلب واستخراج محتوى صفحات الويب. يتطلب web_search.fetch_enabled وbrowser.allowed_domains.
mcpعميل Model Context Protocol للاتصال بخوادم MCP الخارجية واستدعاء أدواتها مع دعم mcp.json المحلي.

Messaging (2 أدوات)

إرسال الرسائل عبر قنوات التواصل.

الأداةالوصف
message_sendإرسال رسالة (نص/وسائط/صوت) إلى قناة ومُستلم مهيأين مع توجيه تلقائي للقناة النشطة.
gatewayوصول منخفض المستوى لإرسال رسائل خام عبر Axum HTTP/WebSocket gateway.

Sessions / Agents (8 أدوات)

تنسيق متعدد الوكلاء: إنشاء وكلاء فرعيين، تفويض المهام، وإدارة الجلسات المتزامنة.

الأداةالوصف
sessions_spawnإنشاء وكيل فرعي async يعمل في الخلفية ويعيد run ID فورًا مع إعلان النتيجة عند الاكتمال.
sessions_sendإرسال رسالة إلى جلسة وكيل فرعي قيد التشغيل.
sessions_listعرض الجلسات النشطة مع الحالة.
sessions_historyعرض سجل المحادثة لتشغيل وكيل فرعي.
session_statusفحص حالة جلسة محددة.
subagentsإدارة مجموعة الوكلاء الفرعيين (عرض، إيقاف، فحص).
agents_listعرض وكلاء التفويض المعرّفين بنماذجهم وقدراتهم (يُسجل عند تعريف الوكلاء).
delegateتفويض مهمة إلى وكيل مسمى بمزوّد/نموذج/مجموعة أدوات خاصة.

Remote Devices (2 أدوات)

التفاعل مع العقد البعيدة والإشعارات الدفعية.

الأداةالوصف
nodesإدارة والتواصل مع عقد PRX البعيدة ضمن نشر موزع.
pushoverإرسال إشعارات Push عبر خدمة Pushover.

Git (1 أداة)

عمليات التحكم في الإصدارات.

الأداةالوصف
git_operationsتنفيذ عمليات Git (status/diff/commit/push/pull/log/branch) على مستودع مساحة العمل.

Config (2 أدوات)

إدارة الإعداد وقت التشغيل.

الأداةالوصف
config_reloadإعادة تحميل إعداد PRX مباشرةً دون إعادة تشغيل العملية.
proxy_configعرض وتعديل إعدادات الشبكة/الوكيل أثناء التشغيل.

Third-party Integration (1 أداة)

تكاملات منصات خارجية.

الأداةالوصف
composioالاتصال بأكثر من 250 تطبيقًا عبر منصة Composio (يتطلب API key).

Rendering (2 أدوات)

توليد المحتوى وتنسيق الإخراج.

الأداةالوصف
canvasعرض محتوى منظم (جداول، مخططات، رسوم) للإخراج المرئي.
ttsتحويل النص إلى رسالة صوتية وإرسالها للمحادثة الحالية مع توليد MP3 والتحويل لـ M4A والتسليم تلقائيًا.

Admin (1 أداة)

أدوات داخلية للمخططات والتشخيص.

الأداةالوصف
schemaتنظيف وتطبيع JSON Schema لتوافق مزودي LLM عبر حل $ref وتبسيط unions وإزالة الكلمات غير المدعومة.

مصفوفة الأدوات الكاملة

ToolCategoryDefaultCondition
shellCoreنعمدائمًا
file_readCoreنعمدائمًا
file_writeCoreنعمدائمًا
memory_storeMemory--all_tools()
memory_forgetMemory--all_tools()
memory_getMemory--all_tools()
memory_recallMemory--all_tools()، ومعطلة عند memory.acl_enabled = true
memory_searchMemory--all_tools()
cronCron--all_tools()
cron_addCron--all_tools()
cron_listCron--all_tools()
cron_removeCron--all_tools()
cron_updateCron--all_tools()
cron_runCron--all_tools()
cron_runsCron--all_tools()
scheduleScheduling--all_tools()
xinScheduling--all_tools()
browserBrowser--browser.enabled = true
browser_openBrowser--browser.enabled = true
screenshotVision--all_tools()
imageVision--all_tools() (ضمنيًا عبر ImageTool)
image_infoVision--all_tools()
http_requestNetwork--http_request.enabled = true
web_search_toolNetwork--web_search.enabled = true
web_fetchNetwork--web_search.fetch_enabled = true + browser.allowed_domains
mcpNetwork--mcp.enabled = true + تعريف الخوادم
message_sendMessaging--قناة نشطة (تسجيل على مستوى gateway)
gatewayMessaging--all_tools()
sessions_spawnSessions--all_tools()
sessions_sendSessions--all_tools()
sessions_listSessions--all_tools()
sessions_historySessions--all_tools()
session_statusSessions--all_tools()
subagentsSessions--all_tools()
agents_listAgents--تعريف أقسام [agents.*]
delegateAgents--تعريف أقسام [agents.*]
nodesRemote--all_tools()
pushoverRemote--all_tools()
git_operationsGit--all_tools()
config_reloadConfig--all_tools()
proxy_configConfig--all_tools()
composioThird-party--ضبط composio.api_key
canvasRendering--all_tools()
ttsRendering--قناة نشطة (تسجيل على مستوى gateway)
schemaAdmin--داخلي (وحدة تطبيع schema)

تفعيل وتعطيل الأدوات

أدوات مفعّلة بالميزات

كثير من الأدوات تُفعّل عبر أقسام الإعداد المقابلة. أضف التالي إلى config.toml:

toml
# ── Browser tools ──────────────────────────────────────────────
[browser]
enabled = true
allowed_domains = ["github.com", "stackoverflow.com", "*.openprx.dev"]
backend = "agent_browser"   # "agent_browser" | "rust_native" | "computer_use"

# ── HTTP request tool ─────────────────────────────────────────
[http_request]
enabled = true
allowed_domains = ["api.github.com", "api.openai.com"]
max_response_size = 1000000  # 1MB
timeout_secs = 30

# ── Web search tool ───────────────────────────────────────────
[web_search]
enabled = true
provider = "duckduckgo"      # "duckduckgo" (free) or "brave" (requires API key)
# brave_api_key = "..."
max_results = 5
timeout_secs = 10

# Also enable web_fetch for page content extraction:
fetch_enabled = true
fetch_max_chars = 50000

# ── Composio integration ──────────────────────────────────────
[composio]
enabled = true
api_key = "your-composio-key"
entity_id = "default"

مسار سياسة الأدوات

لتحكم دقيق، استخدم قسم [security.tool_policy] للسماح أو المنع أو الإشراف على أدوات منفردة أو مجموعات:

toml
[security.tool_policy]
# Default policy: "allow", "deny", or "supervised"
default = "allow"

# Group-level policies
[security.tool_policy.groups]
sessions = "allow"
automation = "allow"
hardware = "deny"

# Per-tool overrides (highest priority)
[security.tool_policy.tools]
shell = "supervised"     # Requires approval before execution
gateway = "allow"
composio = "deny"        # Disable Composio even if API key is set

ترتيب حل السياسات (من الأعلى أولوية):

  1. سياسة الأداة المفردة (security.tool_policy.tools.<name>)
  2. سياسة المجموعة (security.tool_policy.groups.<group>)
  3. السياسة الافتراضية (security.tool_policy.default)

تقييد أدوات وكلاء التفويض

عند إعداد وكلاء التفويض، يمكن تقييد الأدوات التي يسمح لهم بالوصول إليها:

toml
[agents.researcher]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
system_prompt = "You are a research assistant."
agentic = true
max_iterations = 10
allowed_tools = ["web_search_tool", "web_fetch", "file_read", "memory_store"]

تكامل أداة MCP

ينفذ PRX عميل Model Context Protocol (MCP)، مما يسمح له بالاتصال بخوادم MCP خارجية وإتاحة أدواتها للوكيل.

الإعداد

عرّف خوادم MCP داخل config.toml:

toml
[mcp]
enabled = true

[mcp.servers.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/docs"]
transport = "stdio"

[mcp.servers.github]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
transport = "stdio"
env = { GITHUB_PERSONAL_ACCESS_TOKEN = "ghp_..." }

[mcp.servers.remote-api]
url = "https://mcp.example.com/sse"
transport = "streamable_http"

ملف mcp.json المحلي

يمكن لـ PRX أيضًا اكتشاف خوادم MCP من ملف mcp.json محلي في مساحة العمل، بنفس صيغة VS Code وClaude Desktop:

json
{
  "mcpServers": {
    "my-server": {
      "command": "node",
      "args": ["./my-mcp-server/index.js"],
      "env": { "API_KEY": "..." }
    }
  }
}

الأوامر داخل mcp.json مقيّدة بقائمة بيضاء من launchers الآمنة: npx, node, python, python3, uvx, uv, deno, bun, docker, cargo, go, ruby, php, dotnet, java.

اكتشاف الأدوات ديناميكيًا

تُكتشف أدوات MCP وقت التشغيل عبر method البروتوكول tools/list. يتم وضع namespace لأدوات كل خادم MCP وإتاحتها لـ LLM كدوال قابلة للاستدعاء. تدعم أداة mcp hook باسم refresh() لإعادة الاكتشاف قبل كل دور للوكيل.

تُزال تلقائيًا متغيرات البيئة الخطرة (LD_PRELOAD وDYLD_INSERT_LIBRARIES وNODE_OPTIONS وPYTHONPATH وغيرها) من عمليات خادم MCP.

الأمان: العزل و ACL

عزل الأدوات

أداة shell تنفذ الأوامر داخل sandbox قابل للتهيئة. يدعم PRX أربعة backends للعزل بالإضافة إلى وضع no-op:

toml
[security.sandbox]
enabled = true           # None = auto-detect, true/false = explicit
backend = "auto"         # "auto" | "landlock" | "firejail" | "bubblewrap" | "docker" | "none"

# Custom Firejail arguments (when backend = "firejail")
firejail_args = ["--net=none", "--noroot"]
BackendPlatformIsolation LevelNotes
LandlockLinux (kernel LSM)Filesystemمدمج في النواة دون تبعيات إضافية
FirejailLinuxFull (network, filesystem, PID)مساحة مستخدم ومتوافر على نطاق واسع
BubblewrapLinux, macOSNamespace-baseduser namespaces وخفيف
DockerAnyContainerعزل كامل بالحاويات
NoneAnyApplication-layer onlyبدون عزل على مستوى نظام التشغيل

وضع الاكتشاف التلقائي (backend = "auto") يفحص backends بالترتيب: Landlock ثم Firejail ثم Bubblewrap ثم Docker ثم يرجع إلى None مع تحذير.

تنقية بيئة shell

أداة shell تمرر قائمة بيضاء محددة من متغيرات البيئة فقط: PATH وHOME وTERM وLANG وLC_ALL وLC_CTYPE وUSER وSHELL وTMPDIR. لا تُكشف مفاتيح API أو الرموز أو الأسرار.

Memory ACL

عند memory.acl_enabled = true يطبق التحكم في الوصول على عمليات الذاكرة:

  • file_read يمنع الوصول إلى ملفات markdown الخاصة بالذاكرة.
  • memory_recall تُعطّل بالكامل (تزال من سجل الأدوات).
  • memory_get وmemory_search يفرضان قيود وصول لكل principal.

سياسة الأمان

يمر كل استدعاء أداة عبر طبقة SecurityPolicy قبل التنفيذ. يستطيع محرك السياسة:

  • حظر العمليات حسب قواعد سياسة الأدوات.
  • طلب موافقة المشرف للأدوات في وضع supervised.
  • تدقيق كل استدعاءات الأدوات.
  • فرض حدود المعدل والموارد.
toml
[security.resources]
max_memory_mb = 512
max_cpu_percent = 80
max_open_files = 256

التوسعة: كتابة أدوات مخصصة

لإضافة أداة جديدة:

  1. أنشئ وحدة جديدة في src/tools/ تطبق trait Tool.
  2. سجّلها في all_tools_with_runtime_ext() داخل src/tools/mod.rs.
  3. أضف إدخالات pub mod وpub use في mod.rs.

مثال:

rust
use super::traits::{Tool, ToolResult};
use async_trait::async_trait;
use serde_json::json;

pub struct MyTool { /* ... */ }

#[async_trait]
impl Tool for MyTool {
    fn name(&self) -> &str { "my_tool" }

    fn description(&self) -> &str {
        "Does something useful."
    }

    fn parameters_schema(&self) -> serde_json::Value {
        json!({
            "type": "object",
            "properties": {
                "input": { "type": "string", "description": "The input value" }
            },
            "required": ["input"]
        })
    }

    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {
        let input = args["input"].as_str().unwrap_or_default();
        Ok(ToolResult {
            success: true,
            output: format!("Processed: {input}"),
            error: None,
        })
    }
}

راجع القسم 7.3 في AGENTS.md لخطوات التغيير الكاملة.

Released under the Apache-2.0 License.