مواد پر جائیں

ایجنٹ کو ٹیسٹ کے لیے مشین دیں

رگ ایک ضائع ہونے والی مشین ہے جو ایجنٹ اُس وقت کھولتا ہے جب اسے واقعی کچھ آزمانا ہو: کوئی صفحہ لوڈ کرنا، ڈیسک ٹاپ ایپ پر کلک کرنا، فون پر ٹیپ کرنا۔ آپ اسے حقیقی وقت میں کام کرتے دیکھ سکتے ہیں، اور جب چاہیں کنٹرول سنبھال سکتے ہیں۔

بند ٹرمنل، براؤزر اور ڈیسک ٹاپ رگز ایسے VM ہیں جن کی ڈسکیں ضائع ہونے والی اور نیٹ ورک گیٹ والے ہوتے ہیں۔ Android اور iOS میزبان کے زیرِ انتظام ایمولیٹر ہیں: ان کی ڈیوائس اسٹیٹ ضائع ہونے والی ہے، مگر ان کی نیٹ ورکنگ سرور میزبان کے پیچھے چلتی ہے۔

رگز اُس مشین پر چلتے ہیں جو cc_server کی میزبانی کرتی ہے — وہی مشین، وہ نہیں جسے آپ دیکھ رہے ہیں۔ صارف کو نظر آنے والی پانچ سطحیں ہیں؛ ڈیسک ٹاپ اور موبائل سطحوں کے لیے میزبان پر سیٹ اپ درکار ہے:

سطح کہاں چلتی ہے سیٹ اپ
Terminal (VM) پن شدہ Ubuntu امیج بوٹ کرنے والا ایک microVM کچھ نہیں — امیج پہلی بار استعمال پر خودکار طور پر لائی جاتی ہے
Browser (VM) پن شدہ Debian امیج بوٹ کرنے والا ایک microVM، جس میں Chromium، Firefox یا WebKit پہلی بار استعمال پر نصب ہوتا ہے کچھ نہیں — ویسے ہی
Computer (VM) QEMU، ایک Linux ڈیسک ٹاپ امیج کے ساتھ جو Chromium، Firefox، WebKit اور GitHub-hosted-runner طرز کی CLI بیس لائن لے کر آتی ہے QEMU انسٹال کریں (brew install qemu)، پھر ترتیبات → سرور → رگز کے تحت ایک ڈیسک ٹاپ امیج درآمد کریں
Android گوگل کا Android ایمولیٹر Android SDK انسٹال کریں، ایک AVD بنائیں اور اسے شروع کریں (نیچے)
iOS سمیولیٹر سرور Mac پر CoreSimulator Xcode اور مطلوبہ iOS رن ٹائم انسٹال کریں، پھر ترتیبات → سرور → رگز کے تحت آٹومیشن برج انسٹال کریں

ٹرمنل اور براؤزر مشینیں ڈائجسٹ پن شدہ امیجز سے بوٹ ہوتی ہیں: درست بائٹس پیشگی نامزد ہوتے ہیں، پہلے بوٹ پر ایک بار لائے جاتے ہیں، اور کیش ہو جاتے ہیں — ہر قسم کے پہلے بوٹ کے بعد، بعد والی مشینیں ڈاؤن لوڈ مکمل طور پر چھوڑ دیتی ہیں اور سیکنڈوں میں اٹھ کھڑی ہوتی ہیں۔ ترتیبات → سرور → رگز دکھاتا ہے کہ آپ کا سرور کیا بوٹ کر سکتا ہے اور اس وقت کون سی مشین چل رہی ہے۔

نصب شدہ ڈیسک ٹاپ امیج اُسی صفحے سے قابلِ انتظام رہتی ہے: درآمد اسے نئے qcow2 سے بدل دیتا ہے، اور حذف کریں اسے ہٹا دیتا ہے تاکہ آپ تازہ بلڈ انسٹال کر سکیں۔

Android یا iOS کے لیے ہماری کوئی امیج نہیں، اور یہ کوئی کوتاہی نہیں۔ Android سسٹم امیجز گوگل کے SDK سے آتی ہیں؛ iOS رن ٹائمز Xcode سے۔ Android کے لیے، Android Studio (یا کمانڈ لائن SDK ٹولز) انسٹال کریں، Device Manager میں ایک ورچوئل ڈیوائس شامل کریں، اور اسے شروع کریں۔ پھر رگز صفحہ Android کو دستیاب بتاتا ہے۔

یہ آپ کو یہ بھی بتاتا ہے کہ بالکل کون سا قدم رہ گیا ہے — SDK نہیں، ایمولیٹر نہیں، ورچوئل ڈیوائس نہیں، یا کوئی ایسی ڈیوائس جو محض چل نہیں رہی — کیونکہ ان چاروں کے حل الگ الگ ہیں اور ان میں سے صرف ایک ڈاؤن لوڈ ہے۔ اگر آپ cc_server کسی ایسے شیل سے شروع کرتے ہیں جو SDK کو نہیں دیکھ سکتا، تو اسے ایکسپورٹ کریں:

ٹرمنل ونڈو
export ANDROID_HOME="$HOME/Library/Android/sdk"

iOS کے لیے، سرور خود macOS پر چلنا چاہیے جہاں Xcode اور iOS سمیولیٹر رن ٹائم انسٹال ہو۔ ترتیبات → سرور → رگز کھولیں اور iOS آٹومیشن برج انسٹال کریں دبائیں۔ سرور چیک سم پن شدہ WebDriverAgent آرٹی فیکٹ لاتا ہے، اس کی تصدیق کرتا ہے، اور اسے سرور کی ملکیت والے آٹومیشن اسٹور میں انسٹال کرتا ہے۔ سیٹ اپ کے دوران کوئی سمیولیٹر بوٹ نہیں ہوتا۔

مشینیں ٹیبز کی شکل میں رہتی ہیں، چیٹ اور ڈف کے ساتھ — کسی اسپیس میں یا کسی PR صفحے پر، اُسی + مینو میں، مشینیں کے تحت:

  • کمپیوٹر — Chromium، Firefox اور WebKit والا ایک Linux ڈیسک ٹاپ
  • Chromium، Firefox یا WebKit — ایک براؤزر
  • Android — چل رہا Android ایمولیٹر
  • iOS سمیولیٹر — اسی گفتگو کے لیے بنایا گیا ضائع ہونے والا سمیولیٹر

کوئی ایک چنیں اور مشین شروع کریں دبائیں۔ ٹیب بتاتا ہے کہ بوٹ کس مرحلے میں ہے (“microVM شروع ہو رہا ہے”، “گیسٹ کے اٹھنے کا انتظار”)، محض گھومتے رہنے کے بجائے۔

ٹیب گفتگو تک محدود ہے، اور ایجنٹ ٹول بھی۔ Chromium، Firefox یا WebKit ٹیب اور browser_use، Android اور mobile_use، یا iOS سمیولیٹر اور ios_use ایک ہی ڈیفالٹ مشین سے مخاطب ہوتے ہیں۔ اضافی UI سلاٹس الگ موازنہ مشینیں ہیں؛ ایجنٹ ٹولز ہمیشہ ڈیفالٹ استعمال کرتے ہیں۔

Android پر Flutter ایپ بنانے، انسٹال کرنے اور شروع کرنے کے لیے:

ٹرمنل ونڈو
fvm flutter build apk --debug

پھر mobile_use کو install_apk اور build/app/outputs/flutter-apk/app-debug.apk کے ساتھ کال کریں، اس کے بعد start_app اور Android پیکیج نام۔ ui_dump، اسکرین شاٹس اور اِن پٹ اُسی ڈیوائس کو چلاتے ہیں جو انسانی ٹیب میں دکھائی جاتی ہے۔ stop_app، clear_app_data، uninstall_app، open_url، اور argv طرز کی shell کالز سرور میزبان پر شیل کال کیے بغیر ترقی کے بقیہ چکر کو پورا کرتی ہیں۔

iOS سمیولیٹر پر Flutter ایپ بنانے، انسٹال کرنے اور شروع کرنے کے لیے:

ٹرمنل ونڈو
fvm flutter build ios --simulator --debug
/usr/bin/plutil -extract CFBundleIdentifier raw -o - \
build/ios/iphonesimulator/Runner.app/Info.plist

پھر ios_use کو install_app اور .app ڈائریکٹری کے ساتھ کال کریں، اس کے بعد start_app اور plutil کے پرنٹ کردہ bundle identifier کے ساتھ۔ iOS ٹول stop_app، uninstall_app، open_url، اور سمیولیٹر کے مقامی تشخیص کے لیے argv طرز کا spawn ایکشن بھی ظاہر کرتا ہے۔

ڈیسک ٹاپ اور براؤزر ڈسپلے پینل کے سائز کے مطابق ڈھل جاتے ہیں۔ iOS سمیولیٹر کے مقررہ پوائنٹ سائز کو برقرار رکھتا ہے اور اسے لیٹر باکس کرتا ہے۔ ہر سطح پر اب بھی دو آزاد لین ہوتے ہیں: ایجنٹ کو چھوٹے، سستے اسکرین شاٹس ملتے ہیں جبکہ آپ کو لائیو ویو۔ ٹیب بدلنے سے انسانی اسٹریم رک جاتی ہے، اس لیے پس منظر کی مشین کوئی ڈسپلے بینڈوڈتھ خرچ نہیں کرتی۔

رگ ٹیب خود سے کوئی مشین شروع نہیں کرتا، بشمول لے آؤٹ بحالی کے دوران۔ یہ قاعدہ ایپ لانچ کو غیر متوقع طور پر VM بوٹ کرنے یا سمیولیٹر ڈیوائسز بنانے سے روکتا ہے۔

جب بھی کوئی اور خصوصی کنٹرول نہ تھامے — یا جب آپ تھامیں — کینوس پر ٹائپ کرنا اور کلک کرنا آپ کا حق ہے۔ جب تک آپ وہ لاک تھامے رکھتے ہیں، اسٹیٹس ٹیگ کنٹرول آپ کے پاس ہے پڑھتا ہے، ایجنٹ پھر بھی اسکرین شاٹس لے سکتا ہے، اور سرور اُس واحد چوک پوائنٹ پر اس کے تبدیلی کرنے والے اقدامات مسترد کرتا ہے جہاں سے ہر عمل گزرتا ہے۔ آپ جو کچھ بھی کرتے ہیں وہ آپ کے نام پر درج ہوتا ہے۔

کام مکمل ہونے پر مشین روکیں دبائیں۔

کنٹرول جان بوجھ کر خصوصی ہے: ایک مشین میں دو فریقوں کا ٹائپ کرنا ایسا اِن پٹ پیدا کرتا ہے جو دونوں میں سے کسی کا مقصود نہ تھا۔

کاپی اور پیسٹ رگ کینوس کے آر پار دونوں سمتوں میں کام کرتے ہیں، اور فائلیں گھسیٹنا بھی۔

کاپی اور پیسٹ۔ کینوس پر کاپی کی کورڈ دبائیں اور مشین نے جو کچھ کاپی کیا — متن، تصویر، فائلوں کی فہرست — وہ آپ کے کلپ بورڈ پر آ جاتا ہے۔ پیسٹ آپ کا مواد دوسری سمت بھیجتا ہے اور مشین کے اندر پیسٹ دبا دیتا ہے۔ macOS پر کورڈ ⌘C/⌘V ہے؛ ⌃C گیسٹ شیل تک بطور انٹرپٹ پہنچتی رہتی ہے۔ Windows اور Linux پر ⌃C/⌃V استعمال کریں — گیسٹ کو وہی کی اسٹروک ملتی ہے جو ویسے بھی ملنی تھی، اس لیے گیسٹ ٹرمنل میں ⌃C پھر بھی انٹرپٹ کرتی ہے اور آپ کا اپنا کلپ بورڈ چھیڑا نہیں جاتا۔

پس منظر میں کچھ بھی ہم آہنگ نہیں ہوتا۔ آپ کی اپنی مشین پر کاپی کیا گیا پاس ورڈ ٹائمر چلنے سے VM کے اندر خاموشی سے نہیں پہنچ جاتا؛ وہ آپ کے پیسٹ کرنے پر عبور کرتا ہے۔

رگ میں پیسٹ ڈیفالٹ کے طور پر اجازت یافتہ ہے۔ رگ سے باہر کاپی پہلے پوچھتی ہے — دس منٹ کی اجازت، یا ترتیبات → سرور → رگز → کلپ بورڈ تک رسائی کے تحت ہمیشہ اجازت دیں۔ دونوں سمتیں آزاد ہیں، اور وہ ورک اسپیس کے نہیں، آپ کے پیچھے چلتی ہیں۔

فائلیں اندر گھسیٹیں۔ انہیں کینوس پر کہیں بھی گرائیں۔

  • Browser (VM) پر، صفحے کو اُسی مقام پر حقیقی ڈراپ ملتا ہے جہاں آپ چھوڑتے ہیں، اس لیے اپلوڈ زون بالکل ویسے ہی برتاؤ کرتا ہے جیسے کسی مقامی فائل کے ساتھ۔
  • Computer (VM) پر، فائلیں ~/Drops میں آ جاتی ہیں اور ان کے پاتھ مشین کے کلپ بورڈ پر چلے جاتے ہیں، اس لیے ⌃V انہیں فائل مینیجر یا اپلوڈ فیلڈ میں پیسٹ کر دیتا ہے۔ کوئی میزبان VM کے اندر کوئی پرائیویلجڈ ڈیمن چلائے بغیر کسی من مانی Linux ایپ میں ڈریگ ترکیب نہیں کر سکتا، اور رگز کے پاس ایسا ڈیمن جان بوجھ کر نہیں ہوتا — اس لیے ٹوسٹ آپ کو بتاتا ہے کہ فائلیں کہاں گئیں، بجائے اس کے کہ ڈراپ ہونے کا ڈھونگ رچے۔
  • کسی ٹرمنل پر، فائل اندر کاپی ہو جاتی ہے اور اس کا پاتھ پرامپٹ پر ٹائپ کر دیا جاتا ہے، جو کسی کمانڈ کو دینے کے لیے تیار ہوتا ہے۔ ٹرمنل میں تصویر پیسٹ کرنا بھی وہی کرتا ہے: وہ مشین میں محفوظ ہو جاتی ہے اور آپ کو پاتھ مل جاتا ہے۔

فائلیں باہر گھسیٹنا Computer (VM) سے کام کرتا ہے۔ مشین کے اندر کوئی فائل گھسیٹنا شروع کریں، پوائنٹر کو کینوس سے باہر لے جائیں، اور وہ آپ کے ڈیسک ٹاپ پر حقیقی ڈریگ بن جاتی ہے — اسے Finder یا Explorer میں گرائیں۔ مشین کے فائل مینیجر میں فائلیں کاپی کر کے اپنی طرف پیسٹ کرنا بھی کام کرتا ہے۔ Browser (VM) یہ پیش نہیں کرتا: ہیڈ لیس براؤزر کے پاس پڑھنے کے لیے کوئی ڈریگ پے لوڈ نہیں ہوتا، اور صفحے کی متنی سلیکشن سے اندازہ لگانا عام کلکس کو ہائی جیک کر دے گا۔

کسی اسپیس میں یا کسی PR صفحے پر موجود ٹرمنلز سرور کی اپنی مشین کے بجائے کسی رگ کے اندر چل سکتے ہیں۔ ایسا ہونے پر پینل بند VM بیج دکھاتا ہے۔

کیا بدلتا ہے:

  • آپ جو چلاتے ہیں اُس میں سے کچھ بھی میزبان تک نہیں پہنچتا۔ وہاں کا ایک rm -rf آپ کو رگ کی قیمت ادا کرواتا ہے۔
  • نیٹ ورک ڈیفالٹ کے طور پر انکار کرنے والا ہے۔ صرف رگ کی اجازت کی فہرست میں شامل میزبان قابلِ رسائی ہیں، اور ہر چیز ایک ایسے گیٹ سے گزرتی ہے جو اس فہرست کو نافذ کرتا ہے۔
  • git push اُس ٹرمنل میں پھر بھی کام کرتا ہے جو آپ خود کھولیں۔ رگ کے پاس کوئی محفوظ کریڈینشل نہیں ہوتا؛ وہ فی آپریشن سرور سے قلیل المدت کریڈینشل مانگتی ہے، جو آپ کی اپنی فورج رسائی سے محدود ہوتا ہے، اور رگ بند ہونے پر وہ ٹوکن منسوخ ہو جاتا ہے۔ کسی ایجنٹ کی کھولی ہوئی رگ صرف پڑھنے والا کریڈینشل پاتی ہے، اس لیے وہ fetch کر سکتی ہے مگر پش نہیں۔

جاننے کی باتیں:

  • بحال شدہ بند ٹرمنل آپ کا انتظار کرتا ہے۔ رگ ٹیب کی طرح، آپ کے لے آؤٹ کے ساتھ واپس آنے والا microvm ٹرمنل لانچ پر اپنا VM بوٹ کرنے کے بجائے شیل کھولیں بٹن دکھاتا ہے۔ میزبان شیل ٹرمنل ایک پروسیس کی قیمت ہے؛ بند ٹرمنل ایک مشین کی۔
  • ٹرمنل پر گرائی گئی فائلیں ٹائپ ہوتی ہیں، کھولی نہیں جاتیں۔ بند ٹرمنل پر کوئی CSV گرائیں تو وہ مشین میں کاپی ہو جاتی ہے اور اس کا گیسٹ پاتھ پرامپٹ پر ظاہر ہوتا ہے — میزبان پاتھ وہاں ایسی کمانڈ ہوتی جو ناکام ہو جاتی۔
  • رگ میں موجود کاپی ایک کاپی ہے۔ میزبان پر آپ کا worktree ہی مستند ذریعہ رہتا ہے۔ رگ کے اندر کیے گئے کمیٹس، آپ کے مانگنے پر refs/rigs/<id>/* میں واپس لائے جاتے ہیں — وہ کبھی آپ کی برانچ نہیں ہلاتے اور نہ آپ کے working tree کو چھوتے ہیں۔
  • میزبان کو نشانہ بنانے والا کام پھر بھی میزبان پر چلتا ہے۔ Linux گیسٹ macOS کے لیے بلڈ نہیں کر سکتا اور نہ xcodebuild چلا سکتا ہے۔ اس کے لیے نیٹو بیک اینڈ واضح طور پر چنیں؛ ایپ خاموشی سے بدلنے کے بجائے آپ سے تصدیق مانگے گی۔

Terminal (VM) میں کوئی ڈیو سرور چلائیں — مثلاً پورٹ 3000 پر pnpm dev — اور چند سیکنڈوں میں ٹرمنل کے کونے میں پلگ آئیکون روشن ہو جاتا ہے: پورٹ آپ کی مشین پر localhost:3000 کو فارورڈ ہو جاتا ہے، Browser (VM) کے اندر localhost:3000 پر قابلِ رسائی ہوتا ہے، آپ کے نیٹ ورک پر شیئر کیا جا سکتا ہے، اور https://myapp.test کے طور پر نام دیا جا سکتا ہے۔ پورا بہاؤ — خودکار فارورڈنگ، LAN شیئرنگ، HTTPS والے ڈیو ڈومینز — اپنی الگ گائیڈ رکھتا ہے: ٹرمنل سے پورٹس فارورڈ کریں۔

ایک ورک اسپیس Terminal (VM) اور Browser (VM) کو اپنی امیجز کی طرف اشارہ کر سکتا ہے — ترتیبات → سرور → رگز → حسبِ ضرورت امیجز (یہ ورک اسپیس) کے تحت۔ عام استعمال: ڈیفالٹ امیج کو اُس ٹول چین سے بڑھانا جو آپ کے پروجیکٹ کو درکار ہو تاکہ ہر ٹرمنل تیار حالت میں شروع ہو، یا اُس امیج کو دوبارہ استعمال کرنا جو آپ کی ٹیم پہلے ہی شائع کرتی ہو۔

مشین پھر بھی اُسی انکلوژر کے اندر بوٹ ہوتی ہے: وہی ایگریس گیٹ، وہی کریڈینشل بروکر، وہی لائف سائیکل۔ یہ ترتیب صرف ورک اسپیس ایڈمنز بدل سکتے ہیں، نئی مشینیں اسے سنبھال لیتی ہیں (چلتی ہوئی اپنی رکھتی ہیں)، اور حوالہ لازماً کوئی رجسٹری امیج ہو — مقامی پاتھ مسترد کر دیے جاتے ہیں۔

امیج کو کیا فراہم کرنا چاہیے:

  • Terminal (VM) — bash والی ایک Linux امیج۔ اسے git، curl اور socat بھی درکار ہوتے ہیں — یا تو پیشگی نصب، یا پہلے آغاز پر نصب ہو سکیں (کوئی بھی Debian/Ubuntu بنیاد والی امیج چلتی ہے: یہ خودکار طور پر نصب ہو جاتے ہیں، ساتھ ہی GitHub-hosted-runner طرز کا CLI ٹول سیٹ: کمپائلرز، Python 3، jq، آرکائیو ٹولز، rsync۔ Node/Go/Java جیسے لینگویج رن ٹائمز اور Docker پیشگی نصب نہیں ہوتے)۔ گیسٹ پورٹ 7911 پورٹ فارورڈر کے لیے مخصوص ہے۔
  • Browser (VM) — bash اور socat والی ایک Debian/Ubuntu امیج، نیز ایک chromium بائنری۔ سرور خود Chromium کو chromium --headless=new کے طور پر شروع کرتا ہے اور DevTools کو گیسٹ 9223 سے 9222 پر ریلے کرتا ہے۔ PulseAudio اور ffmpeg پہلے آغاز پر نصب ہوتے ہیں۔ FROM chromedp/headless-shell نہ بنائیں — اس بائنری میں آڈیو نہیں ہوتا۔ یہ اوور رائیڈ صرف Chromium رگز پر لاگو ہوتا ہے؛ Firefox اور WebKit اسے نظر انداز کرتے ہیں اور پن شدہ Debian امیج بوٹ کرتے ہیں۔ گیسٹ پورٹس 9222/9223 مخصوص ہیں۔

دو سفارشات: حوالہ کو ڈائجسٹ سے پن کریں (@sha256:…) تاکہ بائٹس آپ کے نیچے سے بدل نہ سکیں، اور اسے Docker Hub یا GitHub Container Registry پر رکھیں — ان رجسٹریوں کے ڈاؤن لوڈ میزبان خودکار طور پر ایگریس گیٹ سے داخل کر دیے جاتے ہیں؛ دوسروں کو کھینچنے کے لیے اپنے content delivery میزبان قابلِ رسائی رکھنے پڑ سکتے ہیں۔

رگز عارضی ہونے کے لیے بنے ہیں:

  • آئیڈل — تقریباً 15 منٹ تک کچھ نہ ہونے پر براؤزر، ڈیسک ٹاپ یا موبائل رگ پارک ہو جاتی ہے (منجمد، اگلے عمل پر فوراً جاگ اٹھتی ہے)۔ بند ٹرمنل 45 منٹ انتظار کرتا ہے۔ آئیڈل ونڈو سے دوگنا وقت گزرنے پر وہ بند ہو جاتی ہے۔
  • وقت کی حد — ہر رگ کی ایک سخت عمر ہوتی ہے جسے وہ بڑھا نہیں سکتی، چاہے وہ کچھ بھی کر رہی ہو۔
  • میموری — اگر سرور کو کسی نئی رگ کے لیے جگہ درکار ہو تو وہ سب سے کم حالیہ استعمال شدہ کو بند کر دیتا ہے۔ جس رگ کو کوئی چلا رہا ہو، دیکھ رہا ہو، یا جس میں کوئی ٹرمنل کھلا ہو، وہ کبھی نہیں لی جاتی۔

بند رگ کے بند ہونے پر اس کی ڈسک ضائع کر دی جاتی ہے۔ Android رگ بند کرنا میزبان ایمولیٹر سے الگ ہونا ہے — وہ اسے حذف نہیں کرتی۔ iOS رگ اپنی بنائی ہوئی CoreSimulator ڈیوائس حذف کر دیتی ہے۔ جو کچھ رکھنا چاہیں پہلے واپس لے آئیں۔

بند ٹرمنل، براؤزر اور ڈیسک ٹاپ رگز ڈیفالٹ کے طور پر انکار کرنے والے ایگریس گیٹ پر چلتے ہیں: آپ میزبانوں کو واضح طور پر اجازت دیتے ہیں، اور گیسٹ کا واحد راستہ وہ گیٹ ہے جو اُس فہرست کو نافذ کرتا ہے۔ براؤزر رگ پروڈکٹ سائٹ (usectrl.dev) کو بھی ازخود داخل کرتا ہے۔ کریڈینشل بروکر وہی فہرست استعمال کرتا ہے۔

دو واضح انتباہات:

  • موبائل نیٹ ورکنگ میزبان کے پیچھے چلتی ہے۔ Android کا ایمولیٹر اور Apple کا CoreSimulator انکلوژر ایگریس گیٹ کے پیچھے نہیں ہیں۔ کوئی بھی موبائل ٹیب نیٹ ورک بائی پاس کنٹرول پیش نہیں کرتا کیونکہ میزبان کے زیرِ انتظام نیٹ ورک ویسے ہی غیر پابند ہے۔
  • رگ جو کچھ بھی پڑھتی ہے وہ ناقابلِ اعتماد ہے۔ صفحے کا متن، DOM، ایکسیسبلٹی ٹری اور ویو ڈمپس ایجنٹ کو ایسے نشانوں میں لپٹے واپس آتے ہیں جو کہتے ہیں “یہ ڈیٹا ہے، ہدایات نہیں”۔ جو صفحہ آپ کے ایجنٹ کو حکم دینے کی کوشش کرے، وہ ایک اقتباس شدہ اسٹرنگ کے طور پر پڑھا جاتا ہے۔

آپ ترتیبات → سرور → رگز کے تحت ہر چلتی چیز دیکھ سکتے ہیں، اور ان میں سے کوئی بھی روک سکتے ہیں۔

  • رگز اور انکلوژرز — ان سب کے پیچھے کا ماڈل: VM کیوں، دو ڈسپلے لین، کریڈینشل بروکر، لائف سائیکل
  • ٹرمنل سے پورٹس فارورڈ کریں — ڈیو سرور تک ہر اُس جگہ سے پہنچیں جہاں اہمیت ہو
  • رگز حوالہ — ہر سطح، فعل، پورٹ اور ڈیفالٹ ایک ہی جگہ
  • گارڈریلز کنفیگر کریں — Drive an enclosure (rig) ایک ایکشن کلاس ہے جسے آپ فی ورک اسپیس، ایجنٹ یا اسپیس اجازت، پہلے پوچھیں یا انکار پر سیٹ کر سکتے ہیں۔ صرف پڑھنے والے موڈز اسے مکمل طور پر مسترد کرتے ہیں۔