Μετάβαση στο περιεχόμενο

Σταθμοί και περιβλήματα

Ένας σταθμός είναι μια αναλώσιμη μηχανή που ένας πράκτορας οδηγεί σε πραγματικό χρόνο — ένα πρόγραμμα περιήγησης, μια επιφάνεια εργασίας Linux, ένας εξομοιωτής Android, ένας Προσομοιωτής iOS ή η μηχανή πίσω από ένα περίκλειστο τερματικό. Οι περισσότεροι σταθμοί είναι εικονικές μηχανές (VM)· οι προσομοιωτές κινητών που διαχειρίζεται ο ξενιστής είναι οι ρητές εξαιρέσεις. Αυτή η σελίδα εξηγεί κάθε όριο και γιατί τα κομμάτια έχουν τη μορφή που έχουν. Για να ανοίξεις έναν, δες Δώσε σε έναν πράκτορα μηχανή για δοκιμές· για τις ακριβείς ενέργειες, τις θύρες και τις προεπιλογές, δες την αναφορά σταθμών.

Το εγγενές sandbox τυλίγει μια διεργασία σε απομόνωση χώρων ονομάτων — πραγματικό, αλλά μοιράζεται τον πυρήνα σου και περιορίζει μια διεργασία, όχι έναν υπολογιστή. Τη στιγμή που ένας πράκτορας χρειάζεται να κάνει κλικ πάνω σε μια εφαρμογή επιφάνειας εργασίας, να αποδώσει μια σελίδα σε πραγματικό πρόγραμμα περιήγησης ή να εκτελέσει πειράματα rm -rf που θα προτιμούσες να μη σκέφτεσαι, το έντιμο όριο είναι μια μηχανή: δικός της πυρήνας, δικός της δίσκος, δική της στοίβα δικτύου.

Οι περίκλειστες επιφάνειες χρησιμοποιούν δύο υποσυστήματα εικονικών μηχανών:

  • microVM για το τερματικό και το πρόγραμμα περιήγησης — εκκίνηση υπερεπόπτη σε λιγότερο από ένα δευτερόλεπτο από εικόνες container καθηλωμένες σε συγκεκριμένο digest.
  • QEMU για την πλήρη επιφάνεια εργασίας Linux, η οποία χρειάζεται συσκευή οθόνης που το microVM δεν έχει.

Οι επιφάνειες κινητών διαχειρίζονται από τον ξενιστή και δηλώνουν ευθέως το ασθενέστερο όριο:

  • Το Android οδηγεί τον εξομοιωτή της Google μέσω ADB.
  • Το iOS δημιουργεί και κατέχει μια συσκευή CoreSimulator σε ξενιστή Mac και την οδηγεί μέσω WebDriverAgent. Η συσκευή και τα δεδομένα της διαγράφονται όταν κλείσει ο σταθμός, αλλά το δίκτυό της ακολουθεί τον Mac του ξενιστή.

Οι περίκλειστοι σταθμοί γράφουν σε ένα προσωρινό overlay πάνω από εικόνα βάσης μόνο για ανάγνωση, ώστε ένας σταθμός να μην μπορεί να αλλάξει αυτό από το οποίο εκκινεί ο επόμενος. Ένας σταθμός iOS κατέχει μια αναλώσιμη συσκευή CoreSimulator που διαγράφεται όταν κλείσει ο σταθμός. Το Android συνδέεται σε εξομοιωτή του ξενιστή που επιζεί της συνεδρίας.

Εξερχόμενη κίνηση με άρνηση εξ ορισμού

Ενότητα με τίτλο «Εξερχόμενη κίνηση με άρνηση εξ ορισμού»

Το δίκτυο ενός σταθμού ξεκινά από το τίποτα. Οι επιτρεπόμενοι κεντρικοί υπολογιστές ορίζονται ανά σταθμό μέσα από μια πύλη που το φιλοξενούμενο δεν μπορεί να παρακάμψει: οι μόνες διαδρομές εξόδου της μηχανής είναι αυτές που δημιούργησε η διαμόρφωση εκκίνησης. Ένα περίκλειστο τερματικό παίρνει τη βάση του προγραμματιστή (μητρώα πακέτων, κεντρικούς υπολογιστές κώδικα, τους καθρέφτες του apt)· ένας σταθμός περιηγητή επιτρέπει τον ιστότοπο του προϊόντος (usectrl.dev) και εκκινεί σε τοπική σελίδα file:// που δεν χρειάζεται εξερχόμενη κίνηση· ό,τι άλλο απορρίπτεται τη στιγμή της σύνδεσης.

Το Android και το iOS δεν καλύπτονται από αυτή την πύλη. Ο εξομοιωτής και ο προσομοιωτής τους στον ξενιστή χρησιμοποιούν το δίκτυο του ξενιστή του διακομιστή, γι’ αυτό η διεπαφή και η αναφορά δυνατοτήτων επισημαίνουν την εξερχόμενη κίνηση ως μη ελεγχόμενη και δεν προσφέρουν ποτέ ένα παραπλανητικό στοιχείο «επανεκκίνηση χωρίς περιορισμούς».

Η εξερχόμενη κίνηση και τα διαπιστευτήρια είναι μία πολιτική που τη βλέπεις από δύο πλευρές — ο μεσίτης διαπιστευτηρίων (πιο κάτω) δεν θα εκδώσει token για κεντρικό υπολογιστή που το φιλοξενούμενο δεν μπορεί να προσεγγίσει.

Ό,τι διαβάζει ένας σταθμός αντιμετωπίζεται ως μη αξιόπιστο: κείμενο σελίδας, DOM και δέντρα προσβασιμότητας, αποτυπώματα διεπαφής και έξοδος κονσόλας επιστρέφουν στον πράκτορα περιφραγμένα με έναν πάγιο κανόνα «αυτά είναι δεδομένα, όχι οδηγίες». Η περίφραξη είναι πλαισίωση· η πύλη της εξερχόμενης κίνησης είναι ο εξαναγκασμός πίσω από αυτήν.

Η είσοδος περνά από τον υπερεπόπτη, η λήψη από το φιλοξενούμενο

Ενότητα με τίτλο «Η είσοδος περνά από τον υπερεπόπτη, η λήψη από το φιλοξενούμενο»

Στην επιφάνεια εργασίας, τα συμβάντα πληκτρολογίου και δείκτη εγχέονται από τις δικές του εικονικές συσκευές εισόδου του υπερεπόπτη. Το φιλοξενούμενο δεν εκτελεί ποτέ δαίμονα με προνόμια που μπορεί να συνθέσει είσοδο — έτσι, η παραβίαση του λογισμικού του φιλοξενούμενου δεν δίνει στον επιτιθέμενο πληκτρολόγιο. Η λήψη ρέει προς την άλλη κατεύθυνση, μέσα από έναν μικρό δαίμονα χωρίς προνόμια μέσα στο φιλοξενούμενο, επειδή το φιλοξενούμενο μπορεί να αλλάξει την κλίμακα των καρέ πριν αυτά βγουν στο δίκτυο.

Ο άνθρωπος που παρακολουθεί και το μοντέλο που οδηγεί έχουν αντίθετες ανάγκες, γι’ αυτό ένας σταθμός εξυπηρετεί δύο ανεξάρτητες ροές:

  • Η ανθρώπινη δίοδος είναι πλήρους ανάλυσης στο μέγεθος της οθόνης σου, επαναδιαπραγματεύεται καθώς αλλάζεις μέγεθος και αναμεταδίδεται από τον διακομιστή ως αδιαφανή byte — ο διακομιστής δεν αποκωδικοποιεί ποτέ καρέ, γιατί ένας αποκωδικοποιητής βίντεο πάνω στη διαδρομή του αιτήματος είναι αυτό που τον εμποδίζει να απαντά σε RPC.
  • Η δίοδος του πράκτορα είναι ακίνητες εικόνες σε μειωμένη κλίμακα, με ανώτατο όριο φιλικό προς το μοντέλο, μία εικόνα ανά αποτέλεσμα εργαλείου, ενώ τα παλαιότερα καρέ αποβάλλονται κατά τη συμπύκνωση και οι κειμενικές περιγραφές τους επιβιώνουν.

Καμία δίοδος δεν συμβιβάζεται για χάρη της άλλης: εσύ παίρνεις ρευστή εικόνα, το μοντέλο παίρνει φθηνή.

Η ανάληψη ελέγχου είναι στενό πέρασμα, όχι αίτημα

Ενότητα με τίτλο «Η ανάληψη ελέγχου είναι στενό πέρασμα, όχι αίτημα»

Ο αποκλειστικός έλεγχος επιβάλλεται στο μοναδικό σημείο από το οποίο περνά κάθε ενέργεια — όχι ζητώντας από το μοντέλο να φερθεί σωστά. Όσο τον κρατά ένας άνθρωπος, ο διακομιστής αρνείται τις μεταλλακτικές ενέργειες του πράκτορα. Ο πράκτορας κρατά τις ενέργειες παρατήρησης (στιγμιότυπα οθόνης, εξαγωγή δεδομένων), ώστε να μπορεί να αφηγηθεί τι κάνεις, και ενημερώνεται για την ανάληψη ελέγχου μέσα από το κανάλι κατεύθυνσής του αντί να την ανακαλύψει μέσα από απορριφθέντα κλικ. Το κλικ και η πληκτρολόγηση στον καμβά λειτουργούν όποτε δεν κρατά αυτό το κλείδωμα κάποιος άλλος — ή όταν το κρατάς εσύ· η ετικέτα κατάστασης γράφει Έχετε τον έλεγχο. Κάθε συμβάν εισόδου — δικό σου και του πράκτορα — καταγράφεται σε μητρώο ελέγχου ανά σταθμό με την οντότητα που το προκάλεσε και μια μονότονη ακολουθία, ώστε το «ποιος το πάτησε αυτό» να απαντιέται ακόμη και αφού χαθεί η μηχανή.

Το περιεχόμενο περνά τα όρια· οι μηχανές μένουν ξεχωριστές

Ενότητα με τίτλο «Το περιεχόμενο περνά τα όρια· οι μηχανές μένουν ξεχωριστές»

Η αντιγραφή και η επικόλληση δουλεύουν και προς τις δύο κατευθύνσεις, το ίδιο και το σύρσιμο αρχείων μέσα και έξω — αλλά ένας σταθμός είναι διαφορετικός υπολογιστής και ο σχεδιασμός δεν προσποιείται ποτέ το αντίθετο.

Το πρόχειρο μεταφέρεται κατά απαίτηση, δεν καθρεφτίζεται συνεχώς. Πάτησε τον συνδυασμό αντιγραφής πάνω σε έναν σταθμό και το φιλοξενούμενο ενημερώνεται να αντιγράψει· τότε, ό,τι έβαλε στο πρόχειρό του — κείμενο, εικόνα, λίστα αρχείων — ανακτάται και τοποθετείται στο δικό σου. Η επικόλληση στέλνει το ίδιο περιεχόμενο προς την άλλη κατεύθυνση και μετά πατά επικόλληση μέσα στο φιλοξενούμενο. Τίποτα δεν συγχρονίζεται στο παρασκήνιο: ένας κωδικός που αντιγράφεις στη δική σου μηχανή δεν φτάνει σιωπηλά μέσα σε μια εικονική μηχανή επειδή ενεργοποιήθηκε ένα χρονόμετρο.

Η διέλευση ελέγχεται ανά χρήστη και ανά κατεύθυνση, ανεξάρτητα. Η επικόλληση προς έναν σταθμό επιτρέπεται εξ ορισμού· η αντιγραφή από έναν σταθμό ζητά πρώτα έγκριση (παραχώρηση δέκα λεπτών ή Να επιτρέπεται πάντα στις Ρυθμίσεις → Διακομιστής → Σταθμοί → Πρόσβαση στο πρόχειρο). Δεν είναι ποτέ ρύθμιση χώρου εργασίας: ένα μέλος δεν μπορεί να συγκατατεθεί για το πρόχειρο ενός άλλου μέλους.

Στο macOS ο συνδυασμός διέλευσης είναι ⌘C/⌘V, που είναι σαφής — το ⌃C συνεχίζει να φτάνει σε ένα κέλυφος του φιλοξενούμενου ως η διακοπή που είναι. Στα Windows και στο Linux οι δύο συνδυασμοί είναι το ίδιο πάτημα πλήκτρου, έτσι το φιλοξενούμενο το λαμβάνει αμετάβλητο και το πρόχειρό σου αντικαθίσταται μόνο όταν το πρόχειρο του φιλοξενούμενου άλλαξε πραγματικά. Μια διακοπή παραμένει διακοπή.

Τα αρχεία που σύρονται μέσα αντιγράφονται στον φάκελο απόθεσης της μηχανής και μετά προσφέρονται σε αυτήν. Το τι σημαίνει «προσφέρονται» εξαρτάται από το τι μπορεί να γίνει ειλικρινά: μια σελίδα περιηγητή λαμβάνει ένα πραγματικό συμβάν απόθεσης στο σημείο όπου αφήνεις το αρχείο, άρα μια ζώνη μεταφόρτωσης συμπεριφέρεται ακριβώς όπως θα συμπεριφερόταν για ένα τοπικό αρχείο· μια επιφάνεια εργασίας παίρνει τα αρχεία στον ~/Drops με τις διαδρομές τους στο πρόχειρό της, επειδή κανένας ξενιστής δεν μπορεί να συνθέσει σύρσιμο σε μια αυθαίρετη εργαλειοθήκη του Linux χωρίς να εκτελέσει δαίμονα με προνόμια μέσα στο φιλοξενούμενο — πράγμα που ο σχεδιασμός αυτός αρνείται ακριβώς να έχει. Το αποτέλεσμα λέει τι συνέβη, ώστε ένα CSV που αποτέθηκε σε ζώνη μεταφόρτωσης να μην αναφέρεται ποτέ ως μεταφορτωμένο όταν είναι απλώς ένα αρχείο σε έναν φάκελο. Η απόθεση σε ένα περίκλειστο τερματικό αντιγράφει το αρχείο μέσα και πληκτρολογεί τη διαδρομή του στο φιλοξενούμενο στη γραμμή εντολών, που είναι αυτό που μπορεί πραγματικά να χρησιμοποιήσει ένα κέλυφος.

Τα αρχεία που σύρονται έξω λειτουργούν στην επιφάνεια εργασίας, όπου το πρωτόκολλο συρσίματος του X11 κάνει το περιεχόμενο αναγνώσιμο ενόσω το σύρσιμο είναι σε εξέλιξη. Ξεκίνα ένα σύρσιμο μέσα στο φιλοξενούμενο, βγάλ’ το έξω από τον καμβά, και τα αρχεία ανακτώνται στη μηχανή σου και παραδίδονται στο λειτουργικό σύστημα ως πραγματικό σύρσιμο. Η αντιγραφή αρχείων στον διαχειριστή αρχείων του φιλοξενούμενου και η επικόλληση στον ξενιστή λειτουργεί με τον ίδιο τρόπο. Η επιφάνεια περιηγητή σκόπιμα δεν το προσφέρει: ένα headless πρόγραμμα περιήγησης δεν έχει επιλογή συρσίματος να διαβάσει, και το πλησιέστερο διαθέσιμο σήμα — η επιλογή κειμένου της σελίδας — δεν αποδεικνύει καθόλου σύρσιμο, οπότε το να ενεργήσεις βάσει αυτού θα κατέλαβε συνηθισμένα κλικ.

Ό,τι διαβάζεται από ένα φιλοξενούμενο παραμένει μη αξιόπιστο περιεχόμενο: το κείμενο του πρόχειρου φτάνει σε ένα μοντέλο μέσα στην ίδια περίφραξη που περνά και η εξαγωγή μιας σελίδας, και το μητρώο ελέγχου καταγράφει ότι έγινε επικόλληση και πόσο μεγάλη ήταν — ποτέ τι έλεγε.

Τα διαπιστευτήρια δεν κατοικούν ποτέ στο φιλοξενούμενο

Ενότητα με τίτλο «Τα διαπιστευτήρια δεν κατοικούν ποτέ στο φιλοξενούμενο»

Το git push λειτουργεί από ένα περίκλειστο τερματικό που ανοίξατε εσείς, κι όμως το φιλοξενούμενο δεν αποθηκεύει token κεντρικού υπολογιστή κώδικα. Κρατά ένα μυστικό ανά εικονική μηχανή, του οποίου η μόνη δύναμη είναι να ρωτήσει τον μεσίτη διαπιστευτηρίων του ξενιστή — μέσα από σήραγγα που ελέγχει ο ξενιστής — για ένα βραχύβιο token περιορισμένο σε αποθετήριο, ανά ενέργεια, με όριο ρυθμού, φραγμένο από την ίδια λίστα επιτρεπόμενων κεντρικών υπολογιστών με την εξερχόμενη κίνηση και ανακλημένο τη στιγμή που κλείνει ο σταθμός. Μια μηχανή φτιαγμένη για να πεταχτεί δεν πρέπει να περιέχει τίποτα που αξίζει να κλαπεί.

Το τι μπορεί να κάνει αυτό το token ορίζεται όταν ανοίγει ο σταθμός. Ένας σταθμός τερματικού που ανοίγει ένας άνθρωπος παίρνει token εγγραφής, περιορισμένο από τη δική του πρόσβαση του μέλους στη φιλοξενία κώδικα. Ένας σταθμός που άνοιξε ένας πράκτορας παίρνει token μόνο για ανάγνωση: ένα credential helper του git δεν μπορεί να ξεχωρίσει ένα push από ένα fetch, οπότε ο κανόνας push δεν μπορεί να ερωτηθεί για κάθε push μέσα σε έναν φιλοξενούμενο, όπως κάνει η πύλη εκτελέσεων πρακτόρων στον ξενιστή.

Το worktree σε έναν σταθμό είναι δορυφόρος

Ενότητα με τίτλο «Το worktree σε έναν σταθμό είναι δορυφόρος»

Όταν ένας σταθμός μεταφέρει το αποθετήριό σου, το worktree του ξενιστή παραμένει η αυθεντία. Το αντίγραφο συγχρονίζεται προς τα μέσα κατά την εκκίνηση (με εξαίρεση μυστικά όπως τα αρχεία .env), και τα commits επιστρέφουν μόνο όταν το ζητήσεις — ανακτώνται στο refs/rigs/<id>/*, δεν γίνεται ποτέ push, δεν γίνεται ποτέ checkout. Τίποτα μέσα σε μια εικονική μηχανή δεν μπορεί να μετακινήσει το branch σου ή να αγγίξει το working tree σου· η συγχώνευση όσων παρήγαγε ένας σταθμός είναι πάντα ανθρώπινη απόφαση που λαμβάνεται στον ξενιστή.

Ένας διακομιστής ανάπτυξης που ξεκινά μέσα στην εικονική μηχανή τερματικού γίνεται προσβάσιμος — στη μηχανή σου, στον Περιηγητή (VM), προαιρετικά στο τοπικό σου δίκτυο (LAN), προαιρετικά κάτω από domain ανάπτυξης με HTTPS — χωρίς να ανοίξει ποτέ η μηχανή προς τα έξω. Ο χάρτης θυρών του υπερεπόπτη είναι σταθερός από την εκκίνηση, έτσι κάθε μεταγενέστερη προώθηση ταξιδεύει σε δύο στενά κανάλια που ελέγχει ο ξενιστής: έναν προδημιουργημένο πολυπλέκτη εισερχόμενων που αρνείται να καλέσει οτιδήποτε δεν ακούει στην πραγματικότητα το φιλοξενούμενο, και αντίστροφες σήραγγες που ο ξενιστής κρατά ανοιχτές για συνδέσεις που ξεκινά το φιλοξενούμενο. Το HTTPS του domain ανάπτυξης τερματίζεται στον διακομιστή χρησιμοποιώντας αρχή έκδοσης πιστοποιητικών που παράγεται τοπικά και τα κλειδιά της δεν μπαίνουν ποτέ σε κανένα φιλοξενούμενο. Ο μηχανισμός περιγράφεται στο Προώθηση θυρών από τερματικό.

Ένας σταθμός δεν μπορεί να γίνει κατοικίδιο:

  • ένα σκληρό TTL που το φιλοξενούμενο δεν μπορεί να παρατείνει·
  • μια κλίμακα αδράνειας — στάθμευση (οι vCPU σταματούν, η RAM παραμένει στη μνήμη) μετά το παράθυρο αδράνειας, κλείσιμο στο διπλάσιο αυτού — όπου ένα ανοιχτό τερματικό ή ένας θεατής που παρακολουθεί μετράει ως «σε χρήση»·
  • έναν προϋπολογισμό μνήμης μετρημένο σε megabyte που παραμένουν δεσμευμένα, όχι σε συνεδρίες, επειδή μια σταθμευμένη εικονική μηχανή ελευθερώνει CPU και κρατά κάθε byte της RAM· η λιγότερο πρόσφατα χρησιμοποιημένη μηχανή αποβάλλεται πρώτη, και ποτέ κάποια που οδηγεί ή παρακολουθεί ένας άνθρωπος·
  • τερματισμό κατά το κλείσιμο του διακομιστή, συν ένα σκούπισμα ορφανών με σήμανση ιδιοκτησίας στην επόμενη εκκίνηση, ώστε ένας διακομιστής που κατέρρευσε να μην αφήνει ποτέ έναν υπερεπόπτη που δεν υπακούει σε κανέναν.

Οι πρώτες εκκινήσεις κατεβάζουν την καθηλωμένη εικόνα της μηχανής· μετά ο διακομιστής αποθηκεύει προσωρινά ένα προ-εξαγμένο αντίγραφο στο παρασκήνιο, ώστε κάθε επόμενη μηχανή αυτού του είδους να εκκινεί σε δευτερόλεπτα και ένα περίκλειστο τερματικό να ξεκινά με τη βάση CLI που θα είχε ένας runner φιλοξενημένος στο GitHub ήδη εγκατεστημένη — μεταγλωττιστές, Python, jq, εργαλεία αρχειοθέτησης — όχι toolcache γλώσσας ή Docker. Η εικόνα του Υπολογιστή ενσωματώνει την ίδια βάση CLI κατά την κατασκευή, δίπλα στο XFCE και στα προγράμματα περιήγησης.

Το «Δουλεύει στη μηχανή μου» είναι ισχυρισμός για μία μηχανή απόδοσης. Έτσι, ένας σταθμός περιηγητή δεν είναι «ο περιηγητής» — είναι Chromium, Firefox ή WebKit, που τον επιλέγεις όταν τον ανοίγεις, και ο σταθμός εκτελεί αυτόν με τον οποίο άνοιξε σε όλη του τη ζωή. Μία συνομιλία μπορεί να κρατά έναν από τον καθένα: ανοίγοντας τον Firefox (VM) δίπλα στον Chromium (VM) παίρνεις δύο μηχανές, και το να δείξεις και τους δύο στην ίδια σελίδα είναι η σύγκριση. Το WebKit είναι ό,τι πιο κοντινό στο Safari από οτιδήποτε τρέχει σε Linux — ίδια γενεαλογία μηχανής, οπότε πιάνει τα κενά που συναντούν οι χρήστες του Safari.

Οι ενέργειες είναι ίδιες και στα τρία· τα πρωτόκολλα από κάτω δεν είναι, και οι διαφορές δηλώνονται αντί να εξομαλύνονται. Το Chromium μιλά το DevTools Protocol και σπρώχνει καρέ, οπότε η ζωντανή προβολή του δεν κοστίζει τίποτα όσο μια σελίδα είναι ακίνητη. Ο Firefox μιλά το WebDriver BiDi και το WebKit μιλά το κλασικό WebDriver, και κανένα από τα δύο δεν έχει screencast, οπότε οι ζωντανές προβολές τους κάνουν δειγματοληψία — λίγα καρέ το δευτερόλεπτο, που είναι σωστό για να παρακολουθείς μια σελίδα και όχι για να παρακολουθείς μια κινούμενη εικόνα. Όπου μια μηχανή πραγματικά δεν μπορεί να κάνει κάτι (ο Firefox δεν έχει επαναφόρτωση με παράκαμψη της κρυφής μνήμης· το WebKit δεν βλέπει έξοδο κονσόλας που καταγράφηκε πριν ολοκληρωθεί η φόρτωση μιας σελίδας), η απάντηση το λέει αντί να κάνει σιωπηλά κάτι άλλο.

Ένας σταθμός σκόπιμα δεν είναι καθολικός προορισμός. Η ζωντανή προβολή είναι μια καρτέλα στον χώρο ή στο PR όπου συμβαίνει η εργασία, με εμβέλεια εκείνης της συνομιλίας — έτσι η καρτέλα σου και οι κλήσεις browser_use του πράκτορα απευθύνονται σε μία μηχανή (μία ανά μηχανή απόδοσης, στην επιφάνεια περιηγητή). Το αν μπορούν να εκκινήσουν καθόλου σταθμοί είναι ιδιότητα του ξενιστή, γι’ αυτό οι δυνατότητες, οι εικόνες, οι προσαρμοσμένες εικόνες ανά χώρο εργασίας και η λίστα των μηχανών που εκτελούνται βρίσκονται στις Ρυθμίσεις → Διακομιστής → Σταθμοί. Η οδήγηση ενός περιβλήματος αποτελεί δική της κατηγορία ενεργειών περιορισμών, έτσι ένας χώρος εργασίας, ένας πράκτορας ή ένας χώρος μπορεί να την επιτρέπει, να απαιτεί έγκριση ή να την αρνείται εντελώς — οι λειτουργίες μόνο για ανάγνωση την αρνούνται στο σύνολό της.