דלגו לתוכן

תחנות

עובדות בלבד. למודל שמאחוריהן, קראו תחנות ומתחמים מבודדים; כדי לפתוח מכונה, עקבו אחרי המדריך.

משטח מפעיל מנוע ערך תעבורה יוצאת מבודדת
מסוף (exec) מעטפת מעל ערוץ ה-exec של המכונה הווירטואלית microVM smolvm כן
דפדפן Chromium ללא ממשק גרפי (CDP), Firefox (WebDriver BiDi) או WebKit (W3C WebDriver) microVM smolvm כן
מחשב שולחן עבודה X11: קלט דרך ההיפרוויזר, לכידה דרך סוכן האורח QEMU qemu-hvf (macOS), qemu-kvm (Linux), qemu-tcg (נפילה ללא האצה, לעולם לא נבחר אוטומטית) כן
Android Android דרך ADB האמולטור של Google android-emulator לא — האמולטור מנהל את הרשת שלו בעצמו
iOS סימולטור iOS דרך WebDriverAgent CoreSimulator ios-simulator לא — הרשת הולכת אחרי מארח ה-Mac

המסוף ומשטח ה-computer_use חולקים את ערך המשטח computer; המסוף נבדל לפי סימן תמונת ה-exec שלו ולעולם אינו מנוצל מחדש כשולחן עבודה שניתן להפעיל (או להפך). שיחה אחת עושה שימוש חוזר במכונת מסוף אחת.

מנוע ערך פרוטוקול תצוגה חיה תמונות
Chromium chromium (ברירת מחדל) Chrome DevTools Protocol שידור מסך — הדפדפן דוחף פריימים כשהדף מצטייר מחדש JPEG
Firefox firefox WebDriver BiDi תמונות בדגימה (ל-BiDi אין שידור מסך), מוגבלות ל-6 פריימים בשנייה JPEG
WebKit webkit W3C WebDriver (קלאסי) תמונות בדגימה, מתומללות על ידי ffmpeg של המארח PNG

תחנה מריצה מנוע אחד לכל חייה. שיחה אחת יכולה להחזיק תחנה אחת לכל מנוע, וזה מה שמאפשר השוואה זה לצד זה: פתיחת “Firefox (VM)” לצד “Chromium (VM)” היא שתי מכונות, וסגירת אחת משאירה את האחרת פועלת.

העבירו engine אל rig.open או אל הכלי browser_use. שם לא מוכר נדחה במקום ליפול לברירת מחדל — בקשה לדפדפן שמקבלת בשקט דפדפן אחר עונה על שאלת תאימות בתשובה שגויה.

מגבלות ספציפיות לכל מנוע, נאמרות כפי שהן ולא עוקפות אותן:

  • ל-Firefox אין רענון שעוקף את המטמון (הוא דוחה את ignoreCache של BiDi באופן מוחלט), ולכן רענון מאולץ הוא רענון רגיל.
  • גם ל-WebKit אין רענון שעוקף את המטמון, אין הזרמת קונסול (הפלט נלכד על ידי חיבור ל-console.* אחרי כל ניווט, ולכן כל מה שנרשם בזמן הטעינה מוחמץ — כל חילוץ קונסול אומר זאת), והוא זקוק ל-ffmpeg במארח עבור התצוגה החיה שלו.
  • אף אחד מהשניים אינו חושף עץ נגישות פלטפורמי מעל הפרוטוקול שלו, ולכן extract (a11y) מחזיר קירוב שנגזר מה-DOM, ומסומן ככזה.
  • אף אחד מהשניים לא יכול לקלוט השלכת קובץ אמיתית; עדיין אפשר להצביע על שדה קלט של קובץ אל נתיבים בתוך המכונה.
משטח תמונה נמשכת
מסוף ubuntu:24.04, מוצמדת לפי digest אוטומטית באתחול הראשון, דרך הרשת המבוקרת של המכונה עצמה
דפדפן (Chromium, Firefox, WebKit) debian:trixie-slim, מוצמדת לפי digest, בתוספת החבילות של המנוע עצמו אוטומטית באתחול הראשון, ואז נשמרת במטמון כחבילה מחוממת מראש
מחשב תמונת שולחן עבודה qcow2 עם Chromium, Firefox, WebKit ואותו קו בסיס של CLI בסגנון ראנר מתארח ב-GitHub שהמסוף מחמם ייבא תחת הגדרות → שרת → תחנות (הורדות מוצמדות לפי checksum היכן שפורסמו)
Android תמונות המערכת של Google דרך ה-Android SDK
iOS סביבת הרצה של סימולטור Xcode בתוספת WebDriverAgent מוצמד לפי checksum סביבת ההרצה דרך Xcode; גשר האוטומציה מתוך הגדרות → שרת → תחנות

אחרי האתחול הראשון של כל סוג microVM השרת שומר במטמון עותק שחולץ מראש תחת תיקיית הנתונים ומאתחל ממנו כל מכונה מאוחרת יותר — כולל תמונות מחוממות מראש עם החבילות שכבר מותקנות. המסוף מחמם ערכת כלי CLI בסגנון ראנר מתארח ב-GitHub (git, gcc, python3, jq, rsync, כלי ארכיון ושאר קו הבסיס של apt; לא Docker ולא מטמוני כלים של שפות). ה-qcow2 של המחשב אופה את אותם שמות CLI בזמן בניית התמונה, לצד XFCE ושלושת הדפדפנים. כל דפדפן מחמם את המנוע שלו. שלושת המנועים חולקים בסיס Debian אבל לעולם לא חולקים חבילה: המטמון נקבע לפי התמונה, המנוע ומהדורת אודיו (audio-v1-<engine>), מפני שמכונה שחוממה עבור מנוע אחד — או לפני ש-PulseAudio ו-ffmpeg היו חלק מעומס העבודה — אין בה דבר מהאחר. חבילת המסוף נקבעת לפי מהדורת ערכת כלים (tools-v1) מאותה סיבה: חבילה שחוממה לפני שהמהדר היה חלק מהתמונה לא צריכה לשרת מכונה שאמורה לכלול אחד.

אין תמונת אוטומציה אפויה ששווה לקחת — ה-chromedp/headless-shell של Chromium מקמפל החוצה גם את ALSA וגם את PulseAudio, ולכן הוא לעולם לא יפיק קול; היחידה המתוחזקת של Firefox גדולה פי 33 מבסיס Debian ובכל זאת אינה כוללת socat; ואין בכלל תמונה מתוחזקת של WebKit. לכן כל מנוע מותקן בהתנעה הראשונה (chromium, firefox-esr או webkit2gtk-driver) ומגיע תוך כדי כך לארכיוני Debian (deb.debian.org, security.debian.org, cloudfront.debian.net). Chromium הוא הבינארי של ההפצה שמופעל בתור chromium --headless=new.

תמונות מותאמות אישית לפי סביבת עבודה

קטע בשם “תמונות מותאמות אישית לפי סביבת עבודה”
מפתח הגדרה דורס
rigs.smolvm.execImage תמונת המסוף (VM)
rigs.smolvm.browserImage תמונת הדפדפן (VM) של Chromium

נכתב דרך מאגר ההגדרות של סביבת העבודה, החסום למנהלים (הגדרות → שרת → תחנות → תמונות מותאמות אישית (סביבת עבודה זו)). הערך חייב להיות הפניית registry — נתיבים מקומיים, ארכיונים ומחרוזות דמויות דגל נדחים, גם בשדה וגם שוב בזמן האתחול. ערך מאוחסן שאינו חוקי מתעלמים ממנו בקול רם ובמקומו מאותחלת ברירת המחדל. ה-registry של התמונה עצמה (בתוספת מארחי blob-CDN ידועים של Docker Hub, GHCR, Quay, GitLab ו-GCR) מתקבל דרך שער התעבורה היוצאת לצורך המשיכה.

חוזה תמונת המסוף — bash קיים; git, curl ו-socat מותקנים מראש או בסיס apt של Debian/Ubuntu (המתחם המבודד מתקין את שלושתם בתוספת ערכת כלי CLI בסגנון ראנר מתארח ב-GitHub בהתנעה הראשונה: מהדרים, Python 3, jq, כלי ארכיון, rsync. מטמוני כלים של שפות ו-Docker אינם מותקנים).

חוזה תמונת הדפדפן — בסיס apt של Debian/Ubuntu (או החבילות שכבר מותקנות) עם bash ו-socat, בתוספת בינארי chromium שהשרת מפעיל בעצמו בתור chromium --headless=new עם DevTools על loopback של האורח 9223, וממוסר אל פורט האורח 9222. PulseAudio ו-ffmpeg מותקנים בהתנעה הראשונה עבור נתיב האודיו. אל תבנו FROM chromedp/headless-shell: ה-headless.gn במעלה הזרם מקמפל החוצה גם את ALSA וגם את PulseAudio, ולכן הבינארי הזה לא יכול להפיק קול. העקיפה חלה על תחנות Chromium בלבד — פקודת עומס העבודה שהוא מאתחל היא של Chromium, והעברתה ל-Firefox או ל-WebKit תפעיל בינארי שאינו שם. תחנת Firefox או WebKit מתעלמת ממנה בקול רם ומאתחלת את התמונה המוצמדת שלה.

פורטי אוטומציה — כל מכונת דפדפן מעבירה בדיוק פורט loopback אחד של המארח אל האורח 9222. מאחוריו: ה-DevTools של Chromium והסוכן המרוחק של Firefox יושבים על loopback של האורח 9223 עם ממסר socat לפניהם (שניהם נקשרים ל-loopback ללא תנאי); הדרייבר של WebKit מקבל --host ונקשר ל-NIC של האורח בעצמו. Firefox בנוסף מאמת את כותרת ה-Host מול הפורט שלו, ולכן הלקוח שולח את הסמכות של צד האורח ולא את זו שאליה חייג.

כל פעולה מנותחת באופן מלא: מטען פגום מחזיר הודעה שמציינת את השדה, ולעולם לא חריגה. פעלי תצפית (מסומנים ב-○) נשארים מותרים כשאדם מחזיק בשליטה; פעלים משנים נדחים.

screenshot○, cursor_position○, mouse_move, left_click, right_click, middle_click, double_click, triple_click, left_mouse_down, left_mouse_up, left_click_drag, scroll, key, hold_key (0–60 שניות), type, wait○ (0–60 שניות), set_display, clipboard_read○, clipboard_write.

קואורדינטות הן פיקסלים של האורח במצב הנוכחי של האורח; כל צילום מסך מציין את גודל התצוגה. צירופי מקשים משתמשים באיות של X11 (ctrl+s, alt+Tab, Return).

clipboard_read מקבל selection: clipboard (מה ש-ctrl+C ממלא, ברירת המחדל), primary (בחירה-להעתקה של X11) או xdnd (גרירה באוויר). תוצאה ריקה היא תשובה רגילה עבור שלושתם. clipboard_write מקבל text בלבד — תמונות וקבצים נעים בנתיב הקבצים, מפני שהארגומנטים של פעולה נשמרים ביומן הביקורת ולבתים של תמונה אין מה לחפש שם. תוכן לוח הגזירים חוזר עטוף כנתון לא מהימן.

navigate (http/https בלבד), reload (hard אופציונלי), stop_loading, click (בורר או קואורדינטה), fill, type, key (שמות מקשים של DOM), scroll, mouse_move, drag, left_mouse_down, left_mouse_up, extract○ (a11y | dom | console), screenshot○ (full_page אופציונלי), set_viewport (מינימום 320×240), history, wait_for○ (בורר, 0.1–30 שניות), clipboard_read○, clipboard_write.

תוכן דף שחולץ חוזר עטוף כנתון לא מהימן.

לכל דפדפן יש בדיוק לוח גזירים אחד, ולכן clipboard_read אינו מקבל selection. שני פעלי לוח הגזירים זקוקים להקשר מאובטח: לדף שמוגש מעל http:// פשוט אין בכלל API של לוח גזירים, והפעל אומר זאת במקום לדווח על לוח ריק — השתמשו שם ב-type, שמכניס בסמן בלי לעבור דרך לוח גזירים.

tap, swipe (50–5000 מילישניות), type, key (כינויים back, home, recents, enter, delete, backspace, tab, escape, search, menu, volume_up, volume_down, power, או כל KEYCODE_*), screenshot○, ui_dump○, install_apk (מוגבל לעץ העבודה של התחנה ולתיקיית הנתונים של השרת), start_app, stop_app, clear_app_data, uninstall_app, open_url, ו-shell. shell מקבל רשימת argv ורץ בתוך Android, ולעולם לא דרך מעטפת של המארח; הוא מכסה אבחוני מפתחים כגון logcat, dumpsys ו-pm grant.

ל-mobile_use אין פעלי לוח גזירים. מאז Android 10 רק היישום שבמיקוד רשאי לקרוא את לוח הגזירים.

tap, swipe (50–5000 מילישניות), type, key (enter, backspace, tab, escape, מקשי חצים או תו הדפסה אחד; ערכי שינוי אופציונליים command, control, option ו-shift), home, lock, unlock, screenshot○, ui_dump○, install_app (תיקיית .app של סימולטור, מוגבלת לעץ העבודה של התחנה או לתיקיית הנתונים של השרת), start_app, stop_app, uninstall_app, open_url, ו-spawn. spawn מקבל argv ומבצע בתוך הסימולטור דרך simctl; הוא לעולם לא מפעיל מעטפת של המארח.

קואורדינטות הן נקודות מסך של iOS, לא פיקסלים של צילום מסך. הזרם החי שומר על הגודל הקבוע של הסימולטור וממסגר אותו בשוליים במקום לשנות את גודל ההתקן. העברת טקסט בלוח הגזירים ממארח לסימולטור ובחזרה משתמשת באותה מדיניות הרשאות לפי משתמש ולפי כיוון כמו תחנות אחרות; קבצים ותמונות אינם מתקבלים בנתיב לוח ההעתקה של iOS.

כל תחנה יוצרת התקן CoreSimulator וסשן WebDriverAgent בבעלותה. סגירתה עוצרת את WebDriverAgent, מכבה ומוחקת את אותו התקן, ומסירה את הרשומה שלו מהרישום. תחנות iOS רצות רק על שרת macOS עם Xcode, סביבת הרצה של iOS מותקנת וגשר האוטומציה המוצמד. הן אינן חושפות אודיו, מיקרופון, השלכת קבצים, מעטפת של המארח או הבטחת רשת מבודדת.

כלי תיאור
rig_list רשימת התחנות של סביבת עבודה עם משטח, סטטוס, תצוגה ובקר
rig_close השמדת תחנה והשלכת הדיסק שלה
שלב משמעות
provisioning מאותחלת; פירוט הסטטוס נושא את השלב הנוכחי כפי שהוא
ready נגישה ומקבלת פעולות
parked בחניה מחוסר פעילות: מעבדים וירטואליים מופסקים, ה-RAM נשאר תופס; הפעולה הבאה מעירה אותה
closing נסגרת
closed נעלמה; השורה נשארת לצורך שביל הביקורת
failed מתה או לא עלתה כלל; ניתנת להבחנה כך שהממשק יכול להציע ניסיון חוזר
סיבת סגירה מופעלת כאשר
requested אדם או סוכן ביקשו
idleTimeout חוסר פעילות מעבר לפי 2 מחלון חוסר הפעילות, או פינוי בגלל זיכרון
ttlExpired תוחלת החיים הקשיחה נגמרה
conversationEnded השיחה הבעלים הסתיימה
workspaceGone סביבת העבודה נמחקה או שהחברות אבדה
serverShutdown השרת נעצר
backendFailure ההיפרוויזר מת מתחתיה
ערך מסוף דפדפן מחשב נייד
זיכרון 512 MB 2048 MB (Chromium); 2560 MB (Firefox, WebKit) 4096 MB 4096 MB
מעבדים וירטואליים 2 2 4 4
TTL קשיח 8 שעות 2 שעות 2 שעות 2 שעות
חלון חוסר פעילות 45 דקות 15 דקות 15 דקות 15 דקות
תצוגת אתחול — 1280×800 1280×800 1080×1920
  • תמונות בערוץ הסוכן מוגבלות ל-1280×800; הערוץ האנושי מנהל משא ומתן עד 2560×1600.
  • תקציב הזיכרון התופס של המארח עבור כל התחנות עומד כברירת מחדל על 12 GB, ונמדד במגה-בייט תופסים (מכונה וירטואלית בחניה עדיין מחזיקה את ה-RAM שלה). הפינוי הוא לפי השימוש הישן ביותר, ולעולם לא לוקח מכונה שמישהו מפעיל, צופה בה, או שיש בה מסוף פתוח.
  • מסוף פתוח או ערוץ צפייה מצמידים את התחנה ומונעים ממנה לחניה ולהיקטף מחוסר פעילות; ה-TTL הקשיח עדיין חל.

פורטים ודומייני פיתוח

קטע בשם “פורטים ודומייני פיתוח”
פורט היכן שמור ל-
7911 אורח המסוף מרבב הפורטים שכל העברה רוכבת עליו
9222, 9223 אורח הדפדפן הממסר ונקודת הקצה של האוטומציה (WebKit נקשר ל-9222 ישירות ואינו משתמש בממסר)
80, 443 loopback של אורח הדפדפן נתיבי ה-HTTP/HTTPS של דומיין הפיתוח
  • הגילוי סוקר בצד השרת את פורטי ה-TCP המאזינים של אורח המסוף כל ~4 שניות.
  • לכל היותר 16 פורטים מועברים אוטומטית לכל תחנה; נוספים נרשמים ביומן ולא מועברים.
  • ההעברה בצד המארח נקשרת ל-loopback, ומעדיפה את מספר הפורט של האורח עצמו; שתף ברשת המקומית מוסיף פורט LAN שהוקצה על ידי מערכת ההפעלה.
  • דומייני פיתוח חייבים להתאים ל-name.test או ל-name.localhost (אותיות קטנות, תווית של 63 תווים לכל היותר). דומיין אחד ממופה לפורט אחד.
  • HTTPS של דומיין פיתוח משתמש ברשות אישורים מקומית לשרת (EC P-256, תחת <dataDir>/rigs/tls/, מפתחות 0600 ולעולם לא בתוך אורח) עם עלה wildcard אחד עבור *.test / *.localhost. אין openssl במארח פירושו שאין נתיב HTTPS; HTTP פשוט עדיין מנותב.

ברירות מחדל של תעבורה יוצאת

קטע בשם “ברירות מחדל של תעבורה יוצאת”
משטח רשימת היתרים כברירת מחדל
מסוף קו הבסיס של מפתחים בארגז החול (מארחי קוד, מרשמי חבילות, ספקי מודלים) + מראות ה-apt של Ubuntu + מארח הקוד של עץ העבודה עצמו
דפדפן usectrl.dev (אתר המוצר) — בתוספת ארכיוני Debian באתחול הראשון של כל מנוע, בזמן שהוא מתקין את החבילות שלו. דף הבית הוא מסמך file:// מקומי ואינו זקוק לתעבורה יוצאת
מחשב ריקה — לחסום הכול — עד שקורא כלשהו מעניק מארחים
נייד לא נאכפת (רשת מנוהלת על ידי האמולטור)

כל microVM מקבל בנוסף את מארחי ה-registry של התמונה שלו, לצורך המשיכה בלבד. קבוצת המארחים המותרים של מתווך אישורי הגישה נגזרת מאותה רשימת היתרים: לא מונפק אסימון עבור מארח שהאורח לא יכול להגיע אליו.

לוח גזירים והעברת קבצים

קטע בשם “לוח גזירים והעברת קבצים”

שני הכיוונים של העתקה והדבקה, וגרירת קבצים פנימה והחוצה. זמינים לאדם שמפעיל תחנה; סוכן מקבל את לוח הגזירים דרך הפעלים שלמעלה, ובכלל לא העברת קבצים (ממילא יש לו מעטפת בתוך המתחם המבודד).

החציה של לוח הגזירים היא לפי משתמש ולפי כיוון. הדבקה מהמארח לתחנה מותרת כברירת מחדל; העתקה מהתחנה למארח מבקשת אישור (אישור לעשר דקות, או לאפשר תמיד תחת הגדרות → שרת → תחנות → גישה ללוח). שתי הבחירות בלתי תלויות ולעולם אינן הגדרה של סביבת עבודה.

נתיב מסלול נושא
לוח גזירים GET/POST /rig/clipboard/<rigId> טקסט, PNG/JPEG אחד (≤16 MB), והנתיבים באורח של קבצים שבלוח הגזירים
קבצים POST /rig/files/<rigId> עד 64 קבצים, ≤256 MB כל אחד ועד ≤512 MB לכל השלכה, עם נקודת השלכה אופציונלית בפיקסלים של האורח
קבצים GET /rig/files/<rigId>?p=<base64url path> הבתים של קובץ אחד, בחזרה החוצה
  • HTTP, לא RPC. שקע ה-RPC סוגר חיבור על פריים נכנס מעל 256 KB — הגנת DoS שנכונה לפקודות JSON וקטלנית לצילום מסך מודבק. הבתים נוסעים על אותו סוג מסלול שפריימים של תחנה ואודיו של פגישות כבר נוסעים עליו.
  • אימות הוא היעד החתום rig-files:<workspaceId>/<rigId> בתוספת חברות בסביבת העבודה — יעד משל עצמו, כך שכתובת שהונפקה כדי לצפות במכונה לא יכולה גם לכתוב לתוכה קבצים.
  • ההשתלטות חלה. כתיבה ללוח הגזירים והשלכת קבצים הן פעולות משנות ונדחות כשמישהו אחר מחזיק בשליטה; קריאה מלוח הגזירים והוצאה של קובץ החוצה הן תצפית ולכן אינן נדחות.
  • היכן ההשלכות נוחתות: ~/Drops (שולחן עבודה), ~/drops (מסוף — לצד עץ העבודה, לעולם לא בתוכו, כך שהשלכה לעולם לא מופיעה כשינוי שאינו במעקב), /tmp/cc-drops (דפדפן). השרת בוחר את התיקייה; קורא לא יכול לתת לה שם. קבצים קיימים לעולם אינם נדרסים — שם מתנגש נוחת בתור 2-name.ext.
  • מה נאמר לאורח: דף בדפדפן מקבל אירוע השלכה אמיתי בנקודה המבוקשת (Input.dispatchDragEvent); שולחן עבודה מקבל את הקבצים בתוספת ה-URI שלהם בלוח הגזירים שלו, מפני שאף מארח לא יכול לסנתז גרירת XDND אל ערכת כלים כלשהי בלי דמון בעל הרשאות בתוך האורח. התשובה מציינת מה משני אלה קרה.
  • גרירה החוצה היא לשולחן עבודה בלבד וקוראת את ה-XdndSelection של האורח בזמן שגרירה באוויר. מטען זהה למה שהאורח כבר החזיק כשהלחיצה החלה נחשב לבחירה מיושנת מגרירה שהסתיימה, ולא לחדשה — ל-X אין שלב של “הגרירה נגמרה”.
  • דרישות התמונה: תמונת שולחן העבודה חייבת להיות פרוטוקול 2 ואילך (נבנתה אחרי שנכנסה תמיכת לוח הגזירים). תמונה ישנה יותר מחזירה 404, והיישום אומר לבנות אותה מחדש במקום לדווח על מכונה מקולקלת.
  • יומן הביקורת רושם את הצורה, ולעולם לא את התוכן: שורות clipboard_read, clipboard_write, drop_files ו-read_file נושאות ספירות, גדלים ונתיבים. לוח גזירים הוא מקום שבו אישורים חיים לכמה שניות בכל פעם, ושום דבר מהם אינו נרשם.

מעקות בטיחות, אירועים ואחסון

קטע בשם “מעקות בטיחות, אירועים ואחסון”
  • כלי תחנה מצהירים על מחלקת הפעולות enclosureControl (בתוספת networkEgress ו-processSpawn בכלי ה-use; mobile_use ו-ios_use מצהירים גם על packageInstall). rig_close מצהיר על enclosureControl; rig_list אינו מצהיר על דבר. מותר כברירת מחדל; מצבים לקריאה בלבד חוסמים אותה כליל; חוגת האוטונומיה בכל מרחב יכולה להוריד אותה לשאל קודם.
  • אירועי תחום: RigClosedEvent (עם סיבת הסגירה שלו), RigControlChanged (השתלטות / החזרת שליטה), RigReaped (פינוי בגלל חוסר פעילות, TTL או זיכרון, עם הסוכן המפעיל). פתיחת תחנה אינה אירוע. ראו אירועי תחום.
  • אחסון: rig_sessions ו-rig_action_log בכל מסד נתונים של סביבת עבודה. יומן הפעולות רושם כל אירוע קלט עם הזהות המבצעת ומספר סידורי עולה לכל תחנה; טקסט שהוקלד מצונזר לאורך ולגיבוב לפני שהוא נכתב.
  • תיקיית הנתונים: rigs/images/ (תמונות qcow2 מיובאות), rigs/smolvm/ (מצב הרצה לכל תחנה), rigs/smolvm-packs/ (חבילות מכונה שחולצו מראש), rigs/tls/ (רשות האישורים של דומיין הפיתוח), rigs/run/ (שכבות-על וזרעים של QEMU).
  • נתיבים: התצוגה החיה היא לשונית במרחב או בדף בקשת משיכה; /settings/server/rigs הוא מסך ההגדרות של תחנות.