ScreenPilot

الأمان والخصوصية

ما الذي يستطيع الوكيل لمسه عندما يتحكم بسطح مكتبك، وكيف توقفه وتقيّده، وما الذي يُسجَّل، وما الذي يغادر جهازك.

عندما يتحكم تطبيق ذكاء اصطناعي بسطح مكتبك عبر ScreenPilot، يستطيع أن يفعل ما تفعله أنت بالماوس ولوحة المفاتيح: ينقر ويكتب ويضغط الاختصارات ويفتح التطبيقات. تشرح هذه الصفحة كيف توقفه وكيف تقيّده، وما الذي يُسجَّل، وما الذي يغادر جهازك.

تسجيل شاشتك بنفسك وتحرير الفيديو لا علاقة لهما بكل هذا. هذه الضوابط تهمّك عندما يتحكم الوكيل بسطح المكتب.

الوكيل يستخدم الماوس ولوحة المفاتيح الحقيقيين#

لا يوجد sandbox ولا شاشة افتراضية. النقرات والضغطات تذهب إلى النافذة التي في المقدمة كما لو أنك أنت من فعلها. إذا نقر الوكيل الزر الخطأ في تطبيق البريد، فتطبيق البريد هو من يستقبل النقرة.

  • قبل أول إجراء تحكّم، تعرض أسطح مكتب Wayland (مثل KDE وGNOME) نافذة موافقة على التحكم عن بعد. وافق عليها مرة واحدة. يُحفظ رمز الموافقة في state.json داخل مجلد الإعدادات (انظر سجل التدقيق لمعرفة مكانه)، فتكون التشغيلات التالية صامتة. احذف الملف ليطلب ScreenPilot الموافقة من جديد.
  • على macOS يحتاج تطبيق الذكاء الاصطناعي إلى إذن Accessibility. وعلى X11 وWindows لا توجد نافذة موافقة.
  • إذا كان شخص جالساً أمام الجهاز، اطلب منه أن يبعد يده عن الماوس أثناء الـ take.
أغلق ما لا تريد أن يُلمس قبل أن يبدأ الوكيل: البريد، والمحادثات، وتبويب البنك، وطرفية فيها shell على بيئة الإنتاج. يرى الوكيل لقطات شاشاتك ويستطيع النقر في أي مكان فيها.

حرّك الماوس لإيقافه#

يراقب ScreenPilot المؤشر أثناء التحكم. إذا ابتعد المؤشر أكثر من 40 بكسل تقريباً عن المكان الذي وضعه فيه ScreenPilot للتو، يفترض أن شخصاً تولّى الأمر ويتوقف.

  • التحكم المباشر (أدوات مثل click وtype_text): يفشل الإجراء برسالة تقول إن شخصاً آخر حرّك المؤشر. لا يُنفَّذ شيء بعدها حتى يستدعي الوكيل resume ليكمل من حيث المؤشر الآن، أو abort ليتوقف. على الوكيل أن يلتقط لقطة شاشة جديدة بعد resume لأن الشاشة قد تكون تغيّرت.
  • الـ take (perform): يتوقف الـ take عند تلك الخطوة، ويحتفظ بما سُجّل، ويذكر الخطوة الفاشلة. عالج السبب ونفّذه من جديد. لا يمكن استئناف take.

يُجرى الفحص قبل كل إجراء وقبل كل حرف يُكتب. وهو يتفاعل مع الماوس فقط: الضغط على لوحة مفاتيحك أنت لا يوقف شيئاً.

كشف المقاطعة يحتاج أن يقرأ ScreenPilot موضع المؤشر. على GNOME وأسطح مكتب Wayland الأخرى التي تستخدم الواجهة الخلفية portal لا يتيح سطح المكتب هذه المعلومة، فلا يوقف تحريك الماوس الوكيلَ هناك. استخدم abort أو Ctrl+C بدلاً من ذلك. ويعرض screenpilot doctor سطر تسجيل المؤشر لسطح مكتبك.

الإيقاف بـ abort#

يعمل abort دائماً، على كل أسطح المكتب.

  • من تطبيق الذكاء الاصطناعي: الأداة abort توقف perform الجاري وتغلق المشغّل المباشر. لكن الوكيل هو من يجب أن يستدعيها، فإذا أردت إيقافه فوراً فأوقفه أيضاً من تطبيق الذكاء الاصطناعي نفسه.
  • من سطر الأوامر: اضغط Ctrl+C أثناء تشغيل screenpilot perform.
  • إغلاق تطبيق الذكاء الاصطناعي يغلق خادم ScreenPilot، فيوقف أي take جارٍ ويحرّر الماوس.

بعد abort تفتح أداة التحكم التالية مشغّلاً جديداً. وabort لا يتراجع عن أي شيء فعله الوكيل بالفعل.

التشغيل دون مراقبة#

إذا لم يكن أحد جالساً أمام الجهاز، قد يعطّل فحص المؤشر العمل: أي برنامج آخر يحرّك المؤشر سيوقف الوكيل. لهذه الحالة أوقف الفحص:

SCREENPILOT_INTERRUPT=off

مع هذا المتغير يتجاهل ScreenPilot حركة المؤشر من أي طرف آخر. لا يوقف الوكيلَ إلا abort (أو مهلة زمنية، انظر أدناه).

مع SCREENPILOT_INTERRUPT=off لا يوقف تحريك الماوس أي شيء. إذا جلست أمام الجهاز يستمر الوكيل في النقر والكتابة داخل النافذة التي عليها التركيز، وقد تقع نقراتك أنت وسط عمله. استخدمه فقط على جهاز لا يستعمله أحد، واجمعه مع SCREENPILOT_ALLOW_APPS وSCREENPILOT_PERFORM_TIMEOUT.

ضبط متغيرات البيئة#

كل القيود التالية متغيرات بيئة لخادم ScreenPilot، فيجب ضبطها حيث يشغّله تطبيق الذكاء الاصطناعي: في env الخاص بإدخال screenpilot في إعدادات MCP للتطبيق.

"env": {
  "SCREENPILOT_INTERRUPT": "off",
  "SCREENPILOT_ALLOW_APPS": "firefox,notepad",
  "SCREENPILOT_PERFORM_TIMEOUT": "180"
}

في Claude Code يمكنك إضافتها عند تسجيل الخادم:

claude mcp add --scope user screenpilot \
  -e SCREENPILOT_ALLOW_APPS=firefox,notepad \
  -e SCREENPILOT_PERFORM_TIMEOUT=180 \
  -- node /abs/path/to/dist/mcp.js

أعد تشغيل تطبيق الذكاء الاصطناعي بعد أي تغيير. وتشغيل مثبّت ScreenPilot من جديد يعيد كتابة إدخاله، فتحقق من متغيراتك بعد ذلك. الأمر screenpilot setup --print يعرض الإدخال الذي يكتبه المثبّت، وراجع صفحة التثبيت.

لا يوجد أي من هذه القيود مفعّلاً افتراضياً.

تحديد التطبيقات التي تستقبل الإدخال#

المتغير SCREENPILOT_ALLOW_APPS قائمة أسماء تطبيقات مفصولة بفواصل. قبل كل نقر أو سحب أو تمرير أو ضغط مفتاح أو كتابة، يفحص ScreenPilot أي نافذة عليها التركيز. إذا لم يحتوِ صنفها أو عنوانها على أحد الأسماء (لا فرق بين الأحرف الكبيرة والصغيرة)، يفشل الإجراء ويطلب من الوكيل أن يركّز على تطبيق مسموح أولاً.

SCREENPILOT_ALLOW_APPS=firefox,notepad

حدود هذا الفحص:

  • يحتاج التحكم بالنوافذ. على أسطح المكتب التي لا تعرف أي نافذة عليها التركيز (GNOME على Wayland) يفشل كل إجراء محروس برسالة تقول ذلك. لا تضبطه هناك.
  • يسري على أدوات التحكم في MCP. الأداتان focus_window وpointer_move مستثناتان، فيستطيع الوكيل تحريك المؤشر وتركيز نافذة قبل أن يُجرى الفحص.
  • لا يسري على الـ takes التي تُنفَّذ بـ perform، ولا على screenpilot perform وscreenpilot drive في سطر الأوامر. الـ take ملف تستطيع قراءته قبل تشغيله.
  • يفحص النافذة التي عليها التركيز، لا ما تحت المؤشر. هو شبكة أمان وليس حداً أمنياً.

تحديد الأسرار التي يمكن كتابتها#

يستطيع الوكيل كتابة قيمة متغير بيئة دون أن يراها: الأداة type_text مع { "env": "NAME" }. والمتغير SCREENPILOT_ALLOW_ENV قائمة مفصولة بفواصل بالأسماء المسموح استخدامها. أي اسم آخر يُرفض.

SCREENPILOT_ALLOW_ENV=DEMO_PASSWORD,DEMO_EMAIL

بدونه يستطيع الوكيل كتابة أي متغير في بيئة الخادم، ومنها كل ما مرّره له تطبيق الذكاء الاصطناعي. القائمة تفحصها الأداة type_text فقط، ولا تفحصها خطوات { "type": { "env": ... } } داخل الـ take.

مهلة زمنية للـ takes#

المتغير SCREENPILOT_PERFORM_TIMEOUT عدد من الثواني. إذا استمر استدعاء perform أطول من ذلك يوقفه ScreenPilot، فلا يحتجز take معلّق الماوسَ إلى الأبد.

SCREENPILOT_PERFORM_TIMEOUT=180

اجعله أطول قليلاً من مدة الـ take. وهو يقيّد perform عبر خادم MCP فقط، ولا يقيّد أدوات التحكم المباشر ولا perform في سطر الأوامر.

سجل التدقيق#

كل إجراء تحكّم ينفّذه الوكيل عبر أدوات MCP يُضاف إلى ملف، سطر JSON لكل إجراء:

{"at":"2026-10-28T09:14:03.221Z","tool":"type_text","args":{"text":{"chars":18}}}

الملف هو audit.jsonl في مجلد إعدادات ScreenPilot:

النظاممجلد الإعدادات
Linux وmacOS~/.config/screenpilot (أو $XDG_CONFIG_HOME/screenpilot إذا ضبطته)
Windows%APPDATA%\screenpilot

ما يُسجَّل: الوقت واسم الأداة ووسائطها للأدوات focus_window وpointer_move وclick وdrag وscroll وkey وtype_text. اختصارات المفاتيح تُسجَّل. والإجراءات التي يرفضها قيد التطبيقات تُسجَّل أيضاً، لأن السجل يُكتب أولاً.

ما لا يُسجَّل:

  • النص المكتوب. يُسجَّل طوله بالأحرف فقط. والسر المعطى بصيغة { "env": "NAME" } يُسجَّل منه اسم المتغير لا قيمته.
  • الخطوات داخل الـ take. استدعاء perform لا يُفصَّل إلى نقراته. ملف الـ take والتسجيل هما أثر ما حدث.
  • لقطات الشاشة والتسجيلات والنتائج. تُسجَّل الإجراءات فقط.
  • الاستخدام من سطر الأوامر. الأمران screenpilot drive وscreenpilot perform لا يكتبان في السجل.

يبقى السجل على جهازك ولا يقصّه ScreenPilot أبداً. احذفه عندما لا تحتاجه. وفشل الكتابة فيه لا يوقف أي take.

الأسرار#

  • لا تضع كلمة مرور أو رمزاً داخل take.json كنص صريح. الملف يبقى على القرص ومن السهل مشاركته بالخطأ.
  • استخدم { "type": { "env": "NAME" } } في الـ take، أو { "env": "NAME" } في type_text. تُقرأ القيمة من البيئة عند تنفيذ الإجراء. لا تُسجَّل ولا تُرجَع إلى الوكيل.
  • يظل التسجيل يُظهر ما على الشاشة. كلمة المرور في حقل يعرض النص صريحاً ستظهر في الفيديو وفي لقطات الشاشة التي يراها تطبيق الذكاء الاصطناعي. استخدم حقولاً تخفي ما يُكتب.

setup --allow-tools (لـ Claude Code)#

افتراضياً يسألك Claude Code قبل كل استدعاء لأداة من ScreenPilot. هذا السؤال فرملة على كل نقرة. وإذا فضّلت تخطّيه فيستطيع المثبّت السماح بكل أدوات ScreenPilot دفعة واحدة:

screenpilot setup --allow-tools

ما الذي يغيّره: يضيف mcp__screenpilot إلى permissions.allow في الملف ~/.claude/settings.json. هذه القاعدة الواحدة تغطي كل أدوات ScreenPilot، ومنها click وtype_text وkey وperform. تبقى بقية إدخالاتك وتعليقاتك كما هي، ويُنسخ الملف أولاً إلى settings.json.screenpilot-backup.

للتراجع، احذف السطر mcp__screenpilot من الملف، أو شغّل:

screenpilot setup --remove --clients claude-code

هذا يزيل القاعدة، ويزيل أيضاً ScreenPilot ومهارته (skill) من Claude Code. شغّل screenpilot setup بعدها لإضافته من جديد دون القاعدة.

حل وسط: لا تستخدم --allow-tools، واسمح بنفسك في Claude Code بالأدوات التي تقرأ فقط مثل mcp__screenpilot__screenshot وmcp__screenpilot__windows. تبقى النقرات والكتابة تسأل قبل التنفيذ.

الخصوصية: ما الذي يبقى على جهازك#

لا يحتاج ScreenPilot إلى حساب ولا إلى مفتاح API. التسجيل والتحليل والتحرير والتصدير تعمل كلها على جهازك. تُحفظ الملفات في مجلد ScreenPilot داخل Videos (وفي ماك Movies)، أو في sessions عند الاستخدام من سطر الأوامر.

ما الذي يمرّ عبر الشبكة:

  • الصوت. الأصوات الافتراضية (edge) خدمة على الإنترنت: يُرسَل إليها نص أسطر التعليق ويعود الصوت، وعرض قائمة أصوات Edge يستخدمها أيضاً. الأصوات المحلية (local) تعمل على جهازك ولا ترسل شيئاً. وصوت command يشغّل برنامجاً أعددته أنت في voices.json؛ ولا يستطيع الـ storyboard إضافته، فلا يستطيع storyboard من شخص آخر تشغيل برامج. راجع الأصوات.
  • تطبيق الذكاء الاصطناعي. يرى الوكيل ما تعيده أدواته: لقطات شاشاتك، وإطارات من تسجيلاتك، وعناوين النوافذ، ونص صفحة المتصفح التجريبي. ويرسل تطبيقك ذلك إلى مزوّد النموذج وفق سياسة الخصوصية الخاصة به. لا تدع الوكيل ينظر إلى شاشات لا تريد أن يراها ذلك المزوّد.
  • التنزيلات لمرة واحدة. أول تصدير ينزّل مُصيّر الفيديو (نحو 100 ميغابايت). والصفحات في المتصفح التجريبي تحمّل المواقع التي توجّهه إليها، والـ storyboard الذي يطلب خطوط Google يحمّلها وقت التصدير.

يعطّل ScreenPilot القياس عن بعد (telemetry) في مُصيّر HyperFrames الذي يستخدمه.

قبل أن تترك وكيلاً يعمل وحده#

  1. جرّب بـ dry run وشاهده مرة واحدة.
  2. أغلق التطبيقات والتبويبات التي لا تريد أن تُلمس.
  3. اضبط SCREENPILOT_ALLOW_APPS وSCREENPILOT_ALLOW_ENV وSCREENPILOT_PERFORM_TIMEOUT.
  4. اترك الأسرار في متغيرات البيئة.
  5. اعرف كيف توقفه: abort من تطبيق الذكاء الاصطناعي، أو Ctrl+C في سطر الأوامر.
  6. افحص audit.jsonl بعد انتهائه.