Fernzugriff & Clients

Eine Maschine (im Einstellungseditor ein Arbeitsbereich) lebt auf einem einzigen Mac, aber die Person, die sie steuern möchte, sitzt nicht immer an diesem Mac. Bromure Agentic Coding ist aus der Ferne erreichbar, und jeder Fernzugriffsweg läuft über eine einzige, optionale, standardmäßig deaktivierte SSH-Eingangstür. Schalten Sie sie ein, und Sie erhalten drei Zugangswege: Eine Person kann sich von jedem Terminal aus per ssh verbinden und landet in einem Menü; Sie können die Eingangstür selbst über die Befehlszeile verwalten; und ein Rich Client — ein anderer Mac mit der App oder Bromure Remote auf iPhone, iPad oder Apple Vision Pro — kann sich verbinden und die gesamte Instanz — ihre Sitzungen, Räume und die Schaltzentrale, Maschinen, Terminals und Boards — in einem Live-Fenster spiegeln.

Der Rich Client erreicht einen Server auf zwei Arten. Im selben Netzwerk fügen Sie ihn direkt per Adresse hinzu. Von überall sonst melden Sie sich bei einem bromure.io-Konto an und wählen den Server aus einem Verzeichnis: Die beiden Geräte werden von bromure.io zusammengeführt und sprechen dann Peer-to-Peer — ohne Port-Weiterleitung, ohne VPN und ohne zu merkende Adresse — und sobald Sie angemeldet sind, autorisieren sich Ihre eigenen Geräte gegenseitig, sodass die Verbindung passwortlos ist, ohne manuelle Schlüsseleinrichtung.

Dieses Kapitel behandelt das Aktivieren des Fernzugriffs auf dem Host, jeden der Zugangspunkte, wie der Rich Client ein Remote spiegelt (per Adresse und über bromure.io), das Bearbeiten der Einstellungen eines Remotes, die Clients für iPhone, iPad und Vision Pro, das Erreichen von Diensten in Remote-VMs, das Bereitstellen eines Dev-Servers im Internet und das Sicherheitsmodell, das all das absichert. Registrierung im Flottenmaßstab und Cloud-Telemetrie sind ein völlig anderes System — siehe Enterprise. Die vollständige Befehlsreferenz finden Sie unter CLI, API & MCP.

Die drei Zugangswege

Alles Folgende setzt voraus, dass die SSH-Eingangstür aktiviert ist (sie ist standardmäßig deaktiviert). Sobald sie läuft, bedient derselbe Server alle drei Zielgruppen:

ZugangswegWer ihn nutztWas Sie erhalten
Einfaches SSHEine Person an einem beliebigen Terminal (ssh -p 2222 you@mac)Das Remote-Menü — eine curses-artige TUI. Eine reine Shell ist nie erreichbar.
Die bromure-cli remote CLISie, auf dem Host selbstVerwaltung der Eingangstür: aktivieren/deaktivieren, Schlüssel, Status. Siehe Fernzugriff auf dem Host aktivieren.
Der Rich ClientEin anderer Mac mit der App oder Bromure Remote auf iOS / iPadOS / visionOSEin Live-Spiegel der Remote-Instanz mit bidirektionalen Änderungen — erreichbar per Adresse in einem LAN oder über ein bromure.io-Konto von überall.

Der Server ist eingebettet — er ist Apples swift-nio-ssh-Bibliothek, die in die App integriert ist, nicht macOS' eigener sshd. Diese Unterscheidung ist wichtig: Weil die App ihren eigenen Server betreibt, kann sie Ihr macOS-Kontopasswort über OpenDirectory verifizieren, ohne dass Sie jemals Entfernte Anmeldung in den Systemeinstellungen aktivieren müssen und ohne Administratorrechte. Sie lauscht nur auf den exakten macOS-Benutzer, der die App ausführt, und zwingt jede interaktive Anmeldung in das Remote-Menü. Die einzigen maschinenseitigen Ausnahmen sind vier auf die Whitelist gesetzte Befehle, die der Rich Client verwendet (bromure-fatclient/1 control, forward <ip> <port>, forward-udp <ip> und browser-mcp <vm>); alles andere, was ein Mensch eingibt, verhält sich wie eine Anmeldung und landet im Menü.

Hinweis: Das Fernzugriff-Fenster beschreibt den Server als „eine app-eigene Instanz des System-SSH-Servers". Genauer gesagt handelt es sich um einen eingebetteten swift-nio-ssh-Server, bewusst nicht um macOS' sshd — genau das ermöglicht es ihm, ohne Entfernte Anmeldung oder Administratorrechte zu funktionieren.

Fernzugriff auf dem Host aktivieren

Der Fernzugriff ist deaktiviert, bis Sie ihn einschalten, und er lässt sich auf zwei gleichwertige Arten verwalten: über das Fenster Fernzugriff oder die bromure-cli remote CLI. Beide schreiben an denselben Ort, sodass eine in einem vorgenommene Änderung im anderen widergespiegelt wird und live wirksam ist.

Das Fernzugriff-Fenster

Öffnen Sie Bromure Agentic Coding (das App-Namen-Menü) → Fernzugriff…. Der Fenstertitel lautet Fernzugriff. Ein grüner oder grauer Punkt zeigt sshd läuft oder sshd gestoppt an; wenn der Server läuft, erscheint unter der Kopfzeile eine kopierbare Verbindungszeichenfolge der Form ssh -p <port> <user>@<host>.

AbschnittFeldZweckStandard
KopfzeileFernzugriff über SSH aktivierenStartet und stoppt den Server.Aus
ListenerBind-IPAuf welcher Schnittstelle gelauscht wird. 0.0.0.0 = jede Schnittstelle; 127.0.0.1 = nur dieser Mac.0.0.0.0
ListenerPortTCP-Port des Listeners; muss ≥ 1024 sein (ein Nicht-Root-Prozess kann keine privilegierten Ports binden).2222
AuthentifizierungmacOS-KontopasswortAkzeptiert das macOS-Anmeldepasswort des Benutzers, der die App ausführt (verifiziert über OpenDirectory).Ein
AuthentifizierungÖffentlicher SchlüsselAkzeptiert Schlüssel aus der untenstehenden Liste autorisierter Schlüssel.Ein
Server-HostschlüsselFingerabdruckDer ed25519-Hostschlüssel-Fingerabdruck des Servers, zur Out-of-Band-Verifizierung. Zeigt (bei erster Aktivierung generiert) bis zur ersten Nutzung.—
Autorisierte öffentliche SchlüsselListeRegistrierte ssh-ed25519- / ecdsa-Public-Keys. Fügen Sie sie durch Einfügen einer Schlüsselzeile hinzu; entfernen Sie sie mit dem Papierkorb-Symbol. Zeigt Keine Schlüssel registriert. wenn leer.leer

Bearbeiten Sie Bind-IP oder Port und drücken Sie die Eingabetaste, um die Änderung live anzuwenden. Der Abschnitt Authentifizierung vermerkt Verifiziert gegen <user> — den Benutzer, der bromure-ac ausführt. damit klar ist, wessen Passwort die Tür entsperrt.

Warnung: Mindestens eine Authentifizierungsmethode muss aktiviert bleiben — Sie können nicht sowohl Passwort- als auch Public-Key-Authentifizierung ausschalten. Das Einfügen eines ungültigen Schlüssels wird mit Kein gültiger öffentlicher Schlüssel abgelehnt. Das Hinzufügen oder Entfernen eines autorisierten Schlüssels startet den Listener neu, wodurch alle aktiven Verbindungen abbrechen.

Die bromure-cli remote CLI

Die CLI kommuniziert mit der laufenden App über deren Steuerungssocket, der nur dem Eigentümer zugänglich ist, sodass die App die einzige Quelle der Wahrheit bleibt. Sie ist der schnellste Weg, den Zugriff auf einem headless Mac zu aktivieren, den Sie über eine bestehende Shell erreicht haben.

BefehlWas er tut
bromure-cli remote (oder remote status)Gibt aktivierten/laufenden Zustand, Bind und Port, Authentifizierungsmethoden, Hostschlüssel-Fingerabdruck, Anmeldebenutzer, eine fertige Verbindungszeichenfolge und die nummerierte Liste autorisierter Schlüssel aus.
bromure-cli remote enable [--port N] [--bind IP] [--password|--no-password] [--pubkey|--no-pubkey]Startet den Server (startet bei Bedarf den App-Agenten automatisch). Standardwerte: Port 2222, Bind 0.0.0.0, beide Authentifizierungsmethoden ein.
bromure-cli remote disableStoppt den Server und speichert den Aus-Zustand dauerhaft.
bromure-cli remote key add <path-or-key-text>Registriert einen öffentlichen Schlüssel aus einem Dateipfad oder einer eingefügten Schlüsselzeile; gibt dessen Fingerabdruck aus.
bromure-cli remote key lsListet autorisierte Schlüssel mit einem 1-basierten Index, Fingerabdruck und Kommentar auf.
bromure-cli remote key rm <index|fingerprint>Entfernt einen Schlüssel nach Index oder nach einer Teilzeichenfolge des Fingerabdrucks.

remote enable verweigert die Ausführung, wenn Sie sowohl --no-password als auch --no-pubkey übergeben, und meldet einen Fehler, solange ein Base-Image fehlt oder installiert wird. Wenn die App nicht läuft, geben status, disable und key ls Kein bromure-ac-Agent läuft. aus.

Hinweis: Der Server startet nicht, solange das Base-Image fehlt oder noch installiert wird — die Aktivierung gibt dann einen umsetzbaren Fehler zurück statt einer stillen Nichtaktion. Das gilt sowohl beim Start als auch beim Umlegen des Schalters. Installieren Sie das Base-Image zuerst oder schließen Sie dessen Installation ab.

Hostschlüssel, Fingerabdrücke und Vertrauen

Bei der ersten Aktivierung generiert der Server einen ed25519-Hostschlüssel. Dessen Fingerabdruck — angezeigt in der Zeile Server-Hostschlüssel und von bromure-cli remote status, in der Form 256 SHA256:… bromure-ac-remote (ED25519) — ist das, was ein sich verbindender Client verifiziert, um sicherzugehen, dass er den richtigen Mac erreicht hat. Geben Sie diesen Fingerabdruck an denjenigen weiter, der sich verbindet (oder überprüfen Sie ihn selbst im Erstkontakt-Blatt des Rich Clients), damit ein Man-in-the-Middle den Host nicht imitieren kann. Siehe Trust on First Use, wie der Rich Client ihn pinnt.

Ratenbegrenzung

Passwortversuche werden pro Quell-IP durch einen Token-Bucket gedrosselt: fünf Versuche mit voller Geschwindigkeit, dann eine Nachfüllung von etwa einem Versuch alle zwei Sekunden, wobei die auferlegte Verzögerung auf acht Sekunden begrenzt ist. Versuche werden verzögert, nie verweigert, und niemand wird jemals ausgesperrt; eine störende IP kann keine andere verlangsamen. Public-Key-Authentifizierung wird nie gedrosselt.

Anmeldung über einfaches SSH

Jedes Terminal kann den Host mit ssh -p 2222 <user>@<mac> erreichen. Statt einer Shell landet die Verbindung im Remote-Menü — einer curses-artigen TUI (intern bromure-ac __remote-menu), die jeder menschlichen Anmeldung aufgezwungen wird. Eine reine Shell ist dadurch nie erreichbar.

Das Menü stammt aus der Zeit vor der sitzungszentrierten Neugestaltung und ist nach Maschinen organisiert: eine Liste der Arbeitsbereiche mit Live-Statussymbolen (● läuft, ◌ startet, ⏸ angehalten, ○ aus), dazu die Abschnitte Modelle (die installierten Modelle und der Katalog auf dem Gerät) und Trace (Zusammenfassungen, Hostnamen, Lecks). Von dort aus können Sie:

  • Einen Arbeitsbereich erstellen — mit einem Formular auf einem einzigen Bildschirm und einer Tür Full settings… zu Einstellungsformularen pro Bereich.
  • Starten, aussetzen, beenden, neu starten oder löschen eines beliebigen Arbeitsbereichs.
  • Einstellungen bearbeiten. Geheimnisse werden als •••• (set) angezeigt; ein leer gelassenes Geheimnis behält den gespeicherten Wert.
  • Worktrees verwalten — erstellen, mergen, ein Terminal anhängen oder verwerfen.
  • SSH-Schlüssel generieren, Fusion und Modell-Routing umschalten und Trace-Zusammenfassungen durchsuchen.
  • Anhängen an einen beliebigen tmux-Tab oder einen laufenden Docker-Container.

Hinweis: Die Einstellungsformulare des Menüs können das Modelle-Board nicht bearbeiten. Ihr Formular Modelle ist schreibgeschützt: Es listet die Anbieter des Servers (API-Schlüssel oder Abonnement) und zeigt an, ob der Arbeitsbereich die globalen Einstellungen überschreibt. Wählen Sie Anbieter und Modelle auf einem Mac, in den Einstellungen oder in den Remote-Einstellungen eines Spiegels.

Navigieren Sie mit den Pfeiltasten, Enter zum Auswählen und q oder Esc, um zurückzugehen; Beenden (Verbindung trennen) beendet die Sitzung. Die Auswahl von Anhängen übergibt das Terminal an das tmux des Gasts; Ctrl-b d löst zurück zum Menü. Während Sie angehängt sind, öffnet ein Overlay-Tastenkürzel (Standard Ctrl-]) einen hostseitigen Controller — Tabs wechseln, einen neuen Tab öffnen, Worktrees verwalten, Fusion oder Routing umschalten, Einstellungen bearbeiten, neu starten, aussetzen oder trennen — ohne dass der Tastenanschlag jemals den Gast erreicht. Das Anhängen an einen Container fragt nach der Shell (Enter = sh).

Hinweis: Das Menü benötigt ein echtes Terminal. Eine Verbindung ohne TTY gibt einen Hinweis aus, sich mit ssh -t erneut zu verbinden. Das Starten eines kalten Arbeitsbereichs wartet bis zu etwa 20 Sekunden auf die tmux-Sitzung des Gasts, bevor angehängt wird.

Das Overlay-Tastenkürzel ist auf dem Host-Mac (der Maschine, mit der eine Verbindung hergestellt wird) über die Datei ~/Library/Application Support/BromureAC/remote/overlay-key konfigurierbar — akzeptierte Formen sind C-], ^], 0x1d oder 29 — oder über die Umgebungsvariable BROMURE_OVERLAY_KEY.

Ein Remote mit dem Rich Client spiegeln

Der Rich Client macht die Kopie von Bromure Agentic Coding auf diesem Mac — oder Bromure Remote auf iPhone, iPad oder Apple Vision Pro — zu einem Live-Spiegel einer entfernten Instanz. Auf einem Mac erhalten Sie ein vollständiges Fenster mit dem Titel Remote — <name>, das wie das lokale Hauptfenster aussieht und funktioniert: die Sitzungsübersicht, Räume und die Schaltzentrale, die Maschinen, die Aufgaben- und Automatisierungs-Boards. Alles, was Sie tun, läuft auf dem Remote und wird zurückgespiegelt.

Verbinden

Öffnen Sie Arbeitsbereiche › Mit entferntem Bromure verbinden… (⇧⌘K). Das Fenster fasst die Wahl zusammen: „Spiegeln Sie einen anderen Mac mit Bromure — sein Raster, seine Workspaces, Tabs und Automatisierungen. Melden Sie sich an, um Ihre Server von überall zu erreichen, oder fügen Sie einen direkt über seine Adresse in Ihrem LAN hinzu.“ Beide Wege führen zum selben Spiegelungsfenster; sie unterscheiden sich nur darin, wie die beiden Geräte einander finden und sich autorisieren.

Hinweis: Der SSH-Handshake passt sich der Verbindung an: Verbindungs- und Handshake-Budgets skalieren mit der gemessenen Round-Trip-Zeit, sodass eine Verbindung mit hoher Latenz (Hotel-WLAN, Mobilfunk, ein Kontinent entfernt) langsam zustande kommt, statt in einen Timeout zu laufen.

Per Adresse (gleiches Netzwerk)

Verwenden Sie dies in einem LAN, in dem Sie die Adresse des Macs kennen und kein bromure.io-Konto benötigen.

  1. Auf dem Remote-Mac aktivieren Sie den Fernzugriff (das Fenster Fernzugriff oder bromure-cli remote enable).
  2. Auf diesem Mac klicken Sie auf +, geben einen Namen ein (zum Beispiel rack mini), Adresse, Port (Standard 2222) und Remote-Benutzer, und klicken dann auf Verbinden. Gespeicherte Zeilen zeigen user@address:port und den Zeitpunkt der letzten Verbindung.
  3. Beim Erstkontakt zeigt ein Blatt den SSH-Hostschlüssel-Fingerabdruck des Remotes. Verifizieren Sie ihn gegen das Fenster Fernzugriff des Remotes und klicken Sie dann auf Vertrauen & Fortfahren. Der Pin wird für diesen Endpunkt gespeichert; spätere Verbindungen sind stillschweigend, es sei denn, der Schlüssel ändert sich, in welchem Fall die Schaltfläche rot wird und Neuem Schlüssel vertrauen & Fortfahren anzeigt — ein möglicher Man-in-the-Middle.
  4. Der Client versucht die Public-Key-Authentifizierung mit dem dedizierten Schlüssel dieses Geräts. Ist dieser noch nicht autorisiert, greift er auf das macOS-Anmeldepasswort des entfernten Benutzers zurück (Schaltfläche: Anmelden); eine erfolgreiche Passwortanmeldung registriert den Schlüssel dieses Geräts über den Tunnel auf dem Remote, sodass jede spätere Verbindung ohne Passwort erfolgt. Um vorab zu autorisieren, ohne je ein Passwort einzugeben, klicken Sie auf Schlüssel dieses Mac anzeigen und führen bromure-cli remote key add '<this Mac's key>' auf dem Remote aus.

Nach der ersten Verbindung doppelklicken Sie auf einen gespeicherten Server, um sich mit einem Klick erneut zu verbinden; das Kontextmenü jeder Zeile bietet Verbinden, Bearbeiten… und Entfernen. Bromure Remote auf iPhone und iPad bietet denselben Ablauf unter Server über Adresse hinzufügen.

Über ein bromure.io-Konto (von überall)

Die Anmeldung bei bromure.io lässt einen Client Ihre Server über Netzwerkgrenzen hinweg erreichen — vom Café-WLAN zum Mac zu Hause — ohne Portweiterleitung, ohne VPN und ohne eine Adresse, die man sich merken muss. bromure.io stellt die beiden Geräte nur einander vor und leitet Bytes weiter, wenn ein direkter Weg unmöglich ist; die SSH-Sitzung selbst bleibt zwischen ihnen Ende-zu-Ende-verschlüsselt.

  1. Melden Sie sich an. Wählen Sie auf einem Mac im Menü mit dem App-Namen Bei bromure.io anmelden… und melden Sie sich über Ihren Browser an (oder klappen Sie den Code-Abschnitt auf und geben Sie einen sechs Wörter langen Registrierungscode sowie einen Gerätename ein). In Bromure Remote melden Sie sich auf dem Startbildschirm an. Jedes Gerät, das Sie registrieren, teilt dasselbe Konto.
  2. Auf dem Remote-Mac aktivieren Sie Fernzugriff. Ein Server erscheint im Verzeichnis nur, solange seine Eingangstür an ist und er Herzschläge an bromure.io sendet.
  3. Auf dem Client öffnen Sie Mit entferntem Bromure verbinden…. Ihre Server werden unter Meine Server · bromure.io mit einem Live-Online-Punkt und der Zeit der letzten Sichtung aufgeführt. Doppelklicken Sie auf einen (oder wählen Sie ihn aus und klicken Sie auf Verbinden). Der Status lautet „Connecting to <name> via bromure.io…“, während ein Peer-to-Peer-Pfad aufgebaut wird — direkt, per Router-Port-Mapping oder weitergeleitet —, dann öffnet sich der Spiegel.

In diesem Pfad gibt es keine Adresse einzugeben, kein Hostschlüssel-Blatt und kein Passwort: Ihre eigenen Geräte vertrauen einander über Ihr Konto (unten), und der Hostschlüssel wird automatisch gepinnt.

Passwortlos zwischen Ihren eigenen Geräten

Sobald Sie angemeldet sind, teilt jedes Gerät, das Sie registrieren, seine SSH-Identität über Ihr Konto, sodass jedes Ihrer Geräte jeden Ihrer Server ohne Passwort und ohne manuelles bromure-cli remote key add erreicht:

  • Jedes Gerät veröffentlicht beim Start seinen öffentlichen SSH-Schlüssel auf bromure.io. Jeder Ihrer Server (Fernzugriff an) holt die Schlüssel Ihrer Geräte ab und installiert sie innerhalb von Sekunden in seine authorized_keys, sodass ein Gerät, das Sie gerade eben registriert haben, fast sofort autorisiert ist.
  • Ein Server veröffentlicht außerdem den macOS-Login, unter dem er läuft, sodass der Client ihn automatisch als korrekten Benutzer anwählt (genau das Feld, das der Per-Adresse-Pfad Sie ausfüllen lässt).
  • Schlüssel sind auf Ihre eigenen Geräte beschränkt — nie auf die eines anderen Benutzers, selbst innerhalb derselben Organisation.
  • Abmelden auf einem Gerät setzt es außer Dienst: Sein Schlüssel wird von Ihren Servern entfernt und es verschwindet aus dem Verzeichnis, sodass eine erneute Anmeldung nie ein veraltetes Duplikat hinterlässt. Ein 90 Tage lang ungenutztes Gerät wird ebenfalls nicht mehr autorisiert, bis es sich das nächste Mal meldet. Und aus der Web-Konsole von bromure.io können Sie jedes Ihrer Geräte auf Anforderung abmelden.

Hinweis: Der Rich Client erzeugt bei der ersten Verwendung sein eigenes dediziertes ed25519-Schlüsselpaar (Kommentar bromure-ac-fatclient) — das ist der Schlüssel, der in Ihrem Konto veröffentlicht wird. Bei einer Verbindung per Adresse gehört das Pinning des Hostschlüssels zum Endpunkt (address:port), nicht zum Benutzer; wenn Sie also Adresse oder Port eines gespeicherten Servers ändern, entfällt das Pinning und das Fingerabdruck-Sheet erscheint erneut. Eine bromure.io-Verbindung pinnt den Schlüssel des Peers stattdessen über das Konto.

Das Spiegelungsfenster

Das Spiegelungsfenster öffnet sich nach einer erfolgreichen Verbindung automatisch. Es ist die Sitzungsübersicht des entfernten Mac: dieselbe Seitenleiste (Sitzungen, Räume, die Schaltzentrale, Aufgaben, Automatisierungen, Virtuelle Maschinen mit etwaigen Kubernetes-Clustern und Registries), dieselbe Bühne und dieselbe Kopfzeile. Starten Sie eine Sitzung mit Neue Sitzung (⌘N), chatten Sie mit ihr, beantworten Sie ihre Fragen, öffnen Sie einen Raum mit seinem Raster aus Chats oder sprechen Sie mit der Schaltzentrale des Remotes — alles geschieht auf dem Remote, und auch die ⌘K-Palette funktioniert.

Die Kopfzeile hat dieselben Bedienelemente wie das lokale Fenster: die Linux-Pille für das Terminal einer Sitzung, das nach der Maschine benannte Maschinenmenü (Einstellungen…, Maschinendetails, IP-Adresse kopieren, Trace untersuchen, In eigenem Fenster öffnen, Neu starten), den Fusion-Blitz, Agentischen Browser ein- oder ausblenden (⌃⌘B) und Dateibereich ein- oder ausblenden (⌃⌘E). Ein Spiegelungsfenster fügt ein eigenes Bedienelement hinzu, den Netzwerk-Tunnel-Schalter (siehe Der systemweite Netzwerk-Tunnel). Terminals werden mit dem eigenen Erscheinungsbild der Maschine dargestellt.

Einige Dinge verhalten sich über den Spiegel besonders:

  • Einstellungen… öffnet denselben Einstellungseditor wie lokal, gestützt auf ein Lesen mit geleerten Geheimnissen und ein Speichern, das Geheimnisse bewahrt (siehe Geheimnisse bleiben auf dem Host). Sein Bereich Modelle bearbeitet die Überschreibung dieser Remote-Maschine für die Modelleinstellungen des entfernten Mac. Generate new SSH key funktioniert und zeigt Ihnen den neuen öffentlichen Schlüssel.
  • Der Dateibereich (⌃⌘E) durchsucht die Dateien der Maschine über den Tunnel. Er ersetzt das separate Dateibrowser-Fenster früherer Versionen. Siehe Maschinen.
  • Neu starten funktioniert wie im eigenen Fenster des Servers: ein sauberer Neustart nach „…“ neu starten? oder ein erzwungener, wenn Sie beim Auswählen ⌥ gedrückt halten (siehe Eine Maschine neu starten); der Befehl wird dann an den Server gesendet.
  • In eigenem Fenster öffnen öffnet ein zusätzliches Live-Terminalfenster, das sich selbst schließt, wenn die Maschine stoppt.

Läuft auf dem Remote ein älteres Bromure ohne die Sitzungs-API, fällt der Spiegel auf das ältere, maschinenzentrierte Layout zurück.

Menüs wirken auf den Spiegel im Vordergrund

Ist ein Spiegelungsfenster das aktive Fenster, wirken diese Menüpunkte auf den entfernten Mac statt auf diesen:

MenüpunktWirkung auf den gespiegelten Mac
Neue Sitzung… (⌘N)Öffnet den Bildschirm für neue Sitzungen im Spiegel.
Arbeitsbereiche › Neuer Raum …Erstellt den Raum auf dem Remote.
Nächster Raum (⌃⌘R)Wechselt durch die Räume des Remotes (archivierte Räume werden übersprungen).
Arbeitsbereiche › Infrastruktur › Kubernetes-Cluster erstellen… / Registry erstellen…Öffnet das Erstellungs-Sheet im Spiegel, sodass der Cluster oder die Registry auf dem Remote angelegt wird.
Einstellungen… (⌘,)Öffnet die Einstellungen mit dem Remote als Ziel (siehe unten).

Remote-Einstellungen

Drücken Sie ⌘, mit einem Spiegelungsfenster im Vordergrund, und die Einstellungen öffnen sich mit den Standardwerten dieses Mac, mit dem Titel Einstellungen — <host>. Sobald ein Spiegelungsfenster geöffnet ist, wechselt eine Auswahl Einstellungen für: oben in den Einstellungen zwischen Dieser Mac und jedem verbundenen Remote; jedes Ziel erhält einen eigenen Editor, sodass Entwürfe nie zwischen Maschinen wandern. Während die Einstellungen des Remotes geladen werden, zeigt das Fenster „Einstellungen werden von <host> geladen …“; schlägt das fehl, zeigt es Die Einstellungen des Remote-Servers konnten nicht geladen werden mit Erneut versuchen.

Alles läuft über das Remote hin und zurück: Geheimnisse kommen geleert an und bleiben erhalten, sofern Sie kein neues eingeben. Der Bereich Modelle bearbeitet die globalen Modelleinstellungen des Remotes — API-Schlüssel werden geschwärzt angezeigt — und Änderungen werden gespeichert, wenn Sie auf Sichern klicken, anders als in den lokalen Einstellungen, wo das Modelle-Board beim Bearbeiten speichert (siehe Modelle & Anbieter). Die app-weiten Einstellungen dieses Mac — der Bereich Automatisierung sowie die Abschnitte Arbeitsbereich-Subnetz und Remote-Transport unter Ressourcen — werden für ein Remote nicht angezeigt, ebenso wenig im Editor einer Remote-Maschine.

Aus der Ferne bei Anbietern anmelden

Abonnement-Anmeldungen funktionieren vom Client aus durchgängig. Sign in with Anbieter führt die Erfassung auf dem Remote aus, aber die Anmeldeseite des Anbieters (oder die Gerätecode-URL) öffnet sich in Ihrem Browser; bei einem Anbieter, der nie eine URL anzeigt, zeigt der Client das Terminal der Anmelde-VM, damit Sie interaktiv abschließen können. Eine Anmeldung, die in den Einstellungen einer Remote-Maschine gestartet wurde, stellt die Frage nach dem Geltungsbereich — Jeder Arbeitsbereich oder Nur diesen Arbeitsbereich — auf Ihrem Bildschirm; antwortet niemand, bleibt es bei Nur diesen Arbeitsbereich. Eine in den Remote-Einstellungen gestartete Anmeldung wird immer von allen Maschinen auf dem Remote gemeinsam genutzt. Abmelden… funktioniert ebenfalls aus der Ferne.

Branches und Review aus der Ferne

Neuer Branch …, Änderungen prüfen und In Branch mergen funktionieren im Spiegel für eine Sitzung mit eigenem Ordner genau wie auf dem Bildschirm des Remotes selbst (siehe Branches und Review). In Bromure Remote bietet das Menü einer Sitzung Neuer Worktree….

Eine Sitzung auf dem gespiegelten Mac fragen

Während dieser Mac ein Remote spiegelt, kann eine Sitzung hier eine Sitzung auf dem Remote fragen, und zwar über ihren @Spitznamen: Remote-Sitzungen erscheinen in der @-Liste des Eingabefelds und für die Agenten mit dem Namen ihres Hosts, und an eine Anfrage angehängte Dateien gelangen durch den Tunnel in den Posteingang des Peers. Antworten, Steuerung und Abschluss laufen auf demselben Weg zurück. Die Gegenrichtung — Agenten des Remotes, die eine Sitzung auf diesem Mac fragen — ist nicht verfügbar, weil das Remote keinen Rückkanal zum Client hat.

Was gespiegelt wird

Der Spiegel zeigt jede Maschine mit ihrem Live-Laufzustand, Sitzungen und Räume, Tabs und Branches, das Raster, Automatisierungen, das Coding-Aufgaben-Board, Maschinendetails und Vitalwerte, das Docker-Dashboard, Kubernetes-Cluster und Registries, interaktive Live-Terminals sowie die Sicherheitsereignisse des Remotes, die in der Sicherheits-Zeitleiste neben denen dieses Mac erscheinen — ihr Maschinenfilter bietet Alle Maschinen, Dieser Mac und jeden gespiegelten Host. Modelle auf dem Gerät und ihre Downloads laufen auf dem Remote, nie auf dem Client. Änderungen konvergieren auf jedem verbundenen Client: Starten, Stoppen und Neustarten von Maschinen, Sitzungs- und Raumoperationen, Tab-Operationen, Raster-Änderungen (ganzes Layout, der letzte Schreiber gewinnt), Automatisierungsänderungen, der Fusion-Schalter, Docker-Aktionen, gespeicherte Einstellungen und Dateiübertragungen.

Der Spiegel folgt dem Remote über einen Push-Kanal (GET /state/subscribe) auf einer per SSH getunnelten Brücke zum Steuer-Socket des Remotes; solange der Push-Kanal steht, liest der Client den vollständigen Zustand nur alle 5 Sekunden als Herzschlag neu ein und fällt auf ein Einlesen alle 0,75 Sekunden zurück, wenn der Kanal abbricht. Kurze Steueraufrufe werden über eine SSH-Verbindung pro Host gemultiplext; interaktive Terminal-Anhänge verwenden eigene, dedizierte SSH-Verbindungen, weil ein gemultiplexter Kanal die sofortige Ausgabe puffern würde, die ein Terminal braucht. Über eine bromure.io-Verbindung laufen dieselbe Brücke und dieselben Terminal-Streams über den Peer-to-Peer-Pfad, und der Spiegel verhält sich identisch.

Auch Chats gehen sparsam mit der Verbindung um. Wenn Sie den Chat einer Remote-Sitzung zum ersten Mal öffnen, lädt er nur die neuesten ~1,5 MB der Unterhaltung; Hochscrollen bis Früheren Verlauf laden holt ältere Teile. Ein Chat, den Sie erneut öffnen — beim Zurückklicken zu einer Sitzung oder bei einem wieder angezeigten Raum — startet mit dem bereits geladenen Verlauf und holt nur die neuen Nachrichten.

Einige Operationen sind vom Rich Client aus nicht verfügbar:

  • Änderungen am Raster-Layout benötigen ein geöffnetes GUI-Fenster auf dem Remote. Ein vollständig headless betriebenes Remote (App läuft, kein Hauptfenster) spiegelt alles andere, kann aber keine Layoutänderung annehmen.
  • Das Importieren eines SSH-Schlüssels aus einer Datei ist in Remote-Einstellungseditoren ausgeblendet.

Bromure Remote auf iPhone, iPad und Apple Vision Pro

Bromure Remote ist ein reiner Client-Spiegel, der genauso erreicht wird (anmelden und einen Server wählen oder einen per Adresse hinzufügen). Er ist wie der Mac sitzungszentriert:

  • iPhone — eine Liste Sitzungen mit der Anzahl der Sitzungen, die Sie brauchen, ein Bildschirm für neue Sitzungen („Womit kann ich helfen?“) und ein Bildschirm pro Sitzung: ihr Chat, eine Schaltfläche Linux für ihr Terminal und ein Menü mit Fortsetzen, Umbenennen…, Neuer Worktree…, den Einstellungen der Maschine, Archivieren (oder Beenden und archivieren), Sitzung beenden und Sitzung löschen. Ein Raum öffnet sich mit einem Tab pro Sitzung, zwischen denen Sie wischen, samt der Schaltzentrale des Raums.
  • iPad — eine dauerhafte Seitenleiste mit Sitzungen, Räumen und Maschinen; ein Raum zeigt sein Raster aus Chats wie auf dem Mac.

Auf beiden folgt die Liste der Reihenfolge der Seitenleiste des Macs: zuerst Neue Sitzung, direkt darunter Coding-Aufgaben und Automationen, dann die Sitzungen. Die Maschinen sind aufgeteilt in Virtuelle Maschinen (mit dem Raster) und Native Machines — die Sidecar-Macs, die der entfernte Mac angebunden hat, nur gezeigt, wenn es einen gibt; eine native Maschine bietet Neues Terminal. Auf dem iPad bleibt Neue Sitzung über dem einklappbaren Abschnitt Sitzungen sichtbar.

Weigert sich ein entfernter Mac, eine Sitzung zu starten (etwa auf einem Sidecar-Mac ohne diesen Agenten), zeigt der Client dessen Begründung, statt nichts zu tun.

  • Apple Vision Pro — das iPad-Layout plus räumliche Fenster: Heften Sie ein beliebiges Terminal als eigenes Fenster irgendwo im Raum an, öffnen Sie das Raster als eigenes Bühnenfenster oder verwandeln Sie das ganze Raster mit Pin All as Windows in schwebende Fenster.

In einem Raum hat ein einziges Eingabefeld unten eine Auswahl An — die Schaltzentrale des Raums oder eine beliebige Sitzung darin — und ein Anhang-Menü (Fotomediathek, Dateien auswählen, Bild einsetzen); Anhänge werden beim Senden in die Maschine des Ziels hochgeladen. Auf iPhone und iPad kann eine Sitzung, die Ihre Eingabe braucht, Sie per Push-Mitteilung erreichen, während die App im Hintergrund ist; ein Tippen darauf öffnet diese Sitzung. Das Modelle-Board ist auf diesen Geräten nicht verfügbar; ändern Sie Modelle auf einem Mac.

Ausstehende Entscheidungs-Prompts

Manche Aktionen lösen auf dem Remote eine Entscheidung aus — ein Home-Speicher-Upgrade, ein Zurücksetzen bei Basis-Image-Drift, das Löschen einer kompromittierten VM, eine Frage zur Schließaktion, die Geltungsbereichsfrage einer Anbieter-Anmeldung oder ein Alarm zur Exfiltration von Anmeldedaten (der Kompromittierungsdetektor pausiert eine VM, die versucht hat, Anmeldedaten abfließen zu lassen). Diese erscheinen als Hinweise in Ihrem Spiegelungsfenster, und Ihre Antwort geht über den Tunnel zurück. Bleibt ein Prompt unbeantwortet, läuft er mit der sicheren Wahl ab. Ein ausstehender Prompt blockiert nie die Steuerungsebene des Remotes: Der Rest des Spiegels bleibt live, solange der Hinweis angezeigt wird. Die Zustimmungs-Prompts, die ein laufender Agent auslösen kann (Nutzung von Anmeldedaten, Supply-Chain-Durchleitung, Guardrail-Schreibvorgänge, Prompt Injection), werden über einen separaten, vom Gast nicht fälschbaren Pfad behandelt, dokumentiert unter Remote-Zustimmungsbehandlung.

Geheimnisse bleiben auf dem Host

Geheimnisse überqueren nie die Verbindung. Wenn der Rich Client die Einstellungen einer Remote-Maschine oder die Einstellungen des Remotes liest, kommt jedes Geheimnisfeld geleert an (API-Schlüssel von Modellanbietern kommen als geschwärzter Platzhalter an). Beim Speichern bedeutet ein leeres oder geschwärztes Feld „gespeicherten Wert behalten“, ein eingegebenes ersetzt ihn. API-Schlüssel, Tokens, Abonnement-Anmeldungen und MCP-Umgebungsgeheimnisse bleiben auf dem entfernten Mac. Der Rich Client authentifiziert sich nach der Kopplung allein per SSH-Schlüssel — während der Spiegelung gibt es keine Passwortabfragen.

Dienste auf den VMs des Remotes erreichen

Der Dev-Server eines Remote-Arbeitsbereichs lebt unter einer privaten Adresse wie http://192.168.64.5:3000 im Netzwerk des Remotes. Bromure gibt Ihnen zwei Zugriffsstufen darauf — eine automatische und browser-beschränkte, eine optionale und systemweite.

Der Browser-Bereich (automatisch, PAC-beschränkt)

Der einklappbare Browser-Bereich des Spiegelungsfensters (die Globus-Schaltfläche in der Kopfzeile oder ⌃⌘B) ist eine lokale Chromium-VM, deren Seitenverkehr zum entfernten Arbeitsbereich-Subnetz über SSH getunnelt wird. Ein generiertes PAC-Skript (Proxy-Autokonfiguration) leitet nur das entfernte Subnetz über einen SOCKS-Forwarder pro Host und alles andere DIRECT, und Ziele werden auf der entfernten Seite aufgelöst — das Aufrufen der wörtlichen Adresse http://192.168.64.x:port eines entfernten Dev-Servers funktioniert also einfach. Der eigene Browser-Steuerungs-MCP-Stream des entfernten Agenten wird an diesen Bereich weitergeleitet, sodass der entfernte Coding-Agent den Browser steuert, den Sie gerade ansehen.

Wählen Sie eine Sitzung oder Maschine auf einer laufenden Remote-Maschine aus und drücken Sie ⌃⌘B. Der Bereich tut nichts, bis die erste Zustandsaktualisierung das Subnetz des Remotes geliefert hat und der SOCKS-Forwarder läuft (eine Logzeile vermerkt bis dahin „tunnel not ready“). Seine lokale Browser-VM ist auf das Subnetz 192.168.127.0/24 (Gateway 192.168.127.1) festgelegt, sodass sie nie mit einem Arbeitsbereich-Subnetz kollidieren kann. Persistente Browserprofile liegen auf diesem Mac, geordnet nach der ID der Remote-Maschine.

Hinweis: Der Browser-Bereich erfordert, dass dieser Mac Apple Silicon ist und das Browser-Base-Image lokal installiert hat. Der SOCKS-Forwarder bindet 0.0.0.0 (damit die Browser-VM ihn am vmnet-Gateway erreichen kann), akzeptiert aber Verbindungen nur von Loopback und dem gepinnten 192.168.127.x-Browser-Subnetz — er ist niemals ein offenes Relay.

SOCKS-Weiterleitung und feste Port-Weiterleitungen

Jeder verbundene Remote-Host erhält automatisch einen lokalen SOCKS5-Forwarder auf einem ephemeren Port, der an 0.0.0.0 gebunden ist (peer-gefiltert auf Loopback und das 192.168.127.x-Browser-Subnetz). Jedes CONNECT öffnet einen forward <ip> <port>-SSH-Kanal, den das Remote — über das immer aktive Loopback-Relay des Gasts auf vsock 5010 — zum eigenen 127.0.0.1:<port> dieses Gasts überbrückt. Von diesem Mac aus erreicht also curl --socks5 127.0.0.1:<port> http://192.168.64.5:3000 den Remote-Gast Byte für Byte.

Für feste Weiterleitungen gibt es versteckte CLI-Verkabelung: bromure-cli __forward <hostID> <localPort> <remoteIP> <remotePort> für eine ssh -L-artige Weiterleitung und bromure-cli __forward-socks <hostID> <localPort> für einen eigenständigen SOCKS-Proxy. Beide binden standardmäßig Loopback und akzeptieren --bind-all.

Warnung: Das Remote verweigert jede Weiterleitung, deren Ziel kein Gast in seinem eigenen vmnet-Subnetz ist. Sie können eine Weiterleitung nicht nutzen, um den Remote-Mac selbst, sein Gateway oder das Internet zu erreichen — nur die Arbeitsbereich-VMs.

Der systemweite Netzwerk-Tunnel

Wenn jede lokale App — nicht nur der Browser-Bereich — entfernte VMs unter ihren wörtlichen Adressen erreichen soll, aktivieren Sie den Tunnel pro Host mit dem Netzwerkschalter des Spiegelungsfensters (das Symbol mit verbundenen Punkten, das erste der Bedienelemente in der Kopfzeile). Sein Tooltip lautet Direkten Netzwerkzugriff auf die VMs des entfernten Systems aktivieren (192.168.x.x aus jeder lokalen App).

Ein einmaliger privilegierter Helfer — ein über SMAppService installierter launchd-Daemon, kein sudo — erstellt eine utun-Schnittstelle und routet das Remote-Subnetz zu ihr, dann gibt er den Dateideskriptor der Schnittstelle an die App zurück. Ein Userspace-TCP/UDP-Stack in der App terminiert jeden Fluss und spleißt ihn über dieselben SSH-Weiterleitungskanäle unter Verwendung Ihrer SSH-Identität. Es gibt keine pf-Regeln und keine Kernel-Weiterleitung.

Wenn Sie ihn zum ersten Mal aktivieren, erklärt eine Warnung mit dem Titel Bromures Netzwerkhelfer erlauben die einmalige macOS-Genehmigung:

  1. Klicken Sie auf den Symbolleisten-Schalter.
  2. Öffnen Sie in der Warnung Systemeinstellungen → Allgemein → Anmeldeobjekte und erlauben Sie Bromure Agentic Coding (macOS fragt einmalig nach Administrator-Zugangsdaten).
  3. Die App fragt nach der Genehmigung (alle 2 Sekunden, bis zu 5 Minuten) und verbindet sich automatisch in dem Moment, in dem sie eintrifft. Während sie wartet, lautet der Schalter-Tooltip Warte auf Genehmigung in Systemeinstellungen › Anmeldeobjekte….

Hat das Remote sein Maschinen-Subnetz noch nicht gemeldet (noch keine Maschine gestartet), lautet der Tooltip Warten, bis die Gegenstelle ihr Workspace-Subnetz meldet (starten Sie einen Workspace) — zum Abbrechen klicken. Steht der Tunnel, lautet der Tooltip Direkter Netzwerkzugriff auf die VMs des entfernten Systems ist AN — zum Ausschalten klicken; schlägt er fehl, Netzwerk-Tunnel fehlgeschlagen — zum Wiederholen klicken. Ausschalten stoppt den Tunnel, und wenn der letzte Host ihn deaktiviert, wird der Daemon abgemeldet. Die Einstellung wird pro Host gespeichert.

Hinweis: Der Tunnel benötigt ein Administratorkonto für die einmalige Genehmigung. Ohne ein solches funktioniert Bromure weiterhin über den integrierten SOCKS-Pfad — der Helfer wird nur benötigt, um Remote-VMs von anderen Apps zu erreichen. Wenn macOS die Registrierung direkt verweigert, erklärt eine Warnung mit dem Titel Netzwerkhelfer konnte nicht installiert werden dies, und der Schalter versucht es beim nächsten Klick erneut. Ein ping an einen Remote-Gast wird lokal vom Tunnel beantwortet: Es bestätigt, dass das Routing funktioniert, nicht dass der Gast lebt.

Mehrere Remotes (Subnetze pro Installation + Flotten-Routing)

Sie können mehrere Remotes gleichzeitig spiegeln; jedes öffnet sein eigenes Fenster, seinen eigenen SOCKS-Forwarder und (optional) Tunnel. Die Falle, in die dies früher tappte: Jede Installation verwendete historisch dasselbe 192.168.64.0/24-Netzwerk für ihre Arbeitsbereich-VMs, sodass zwei gespiegelte Remotes identische Subnetze bewarben und das systemweite VPN sie nicht unterscheiden konnte.

Subnetze pro Installation beheben das an der Wurzel. Jeder Mac wählt nun ein zufälliges /24 innerhalb von 172.16.0.0/12 — unter Auslassung von Dockers Bereich 172.17–172.20 und jedes /24, in dem sich der Host bereits befindet — und verwendet es für alle seine Arbeitsbereich-VMs, sodass zwei unabhängige Installationen fast nie kollidieren (172.16/12 ist außerdem der private Bereich, der am unwahrscheinlichsten mit einem Firmen-LAN oder VPN kollidiert). Neue Installationen starten auf einem solchen Subnetz; Sie können es jederzeit unter Einstellungen › Ressourcen › Arbeitsbereich-Subnetz einsehen, ändern oder neu auswürfeln. Die Adressvergabe an Gäste ist reines DHCP über Bromures eigenen Switch, das Ganze ist also vollständig hostseitig (kein Image-Neubau), und das Remote meldet sein gewähltes Subnetz in seinem Zustand, sodass Rich Client und Tunnel ihm automatisch folgen.

Für den seltenen Fall, dass zwei Remotes dennoch ein Subnetz teilen, wird das erste wörtlich geroutet und dem zweiten ein 100.64.<n>.0/24-CGNAT-Bereich-Alias gegeben, mit einer 1:1-host-oktett-bewahrenden Neuzuordnung, sodass beide gleichzeitig erreicht werden können.

Warnung: Das Multi-Host-Alias-Routing ist implementiert und unit-getestet, aber die Laufzeit-Verkabelung, die ein alias-fähiges PAC und eine Browser-MCP-Neuzuordnung über Hosts hinweg zusammenfügt, steht noch aus. Ein einzelner Remote-Host ist heute die vollständig unterstützte Konfiguration. Eine bekannte Einschränkung des Aliasing ist, sobald es verkabelt ist, dass eine Dev-Seite, die einen absoluten wörtlichen http://192.168.64.x-Link innerhalb eines aliasierten Remotes ausgibt, fehlgeleitet werden kann; wörtliche (nicht aliasierte) Remotes sind nicht betroffen.

Einen Dev-Server im Internet bereitstellen

Unabhängig von alldem kann ein einzelner HTTP-Dienst, der in einem Arbeitsbereich läuft, mit einem Cloudflare Quick Tunnel pro Port im öffentlichen Internet bereitgestellt werden. Öffnen Sie die Details einer laufenden Maschine (Maschinenmenü › Maschinendetails), suchen Sie den Dienst unter der Ports-Karte und klicken Sie auf den Globus (Tooltip: Im Internet verfügbar machen (Cloudflare-Schnelltunnel)). Bromure startet einen cloudflared-Prozess für diesen Ursprung und gibt Ihnen eine zufällige URL https://<name>.trycloudflare.com — kein Cloudflare-Konto nötig. Ein Tunnel und eine URL pro Dienst; das Bereitstellen oder Zurückziehen eines Dienstes stört nie die anderen.

Die Farbe des Globus verfolgt den Zustand: grau = aus, orange = wird installiert oder gestartet, grün = läuft, rot = fehlgeschlagen. Eine Statuszeile unter dem Port zeigt den Fortschritt (cloudflared wird heruntergeladen & verifiziert (~18 MB, einmalig)…, dann Tunnel wird gestartet…) oder den anklickbaren öffentlichen Hostnamen mit einer Kopieren-Schaltfläche.

Wenn Sie zum ersten Mal etwas bereitstellen, erläutert ein einmaliger Zustimmungsdialog mit dem Titel Dienste über Cloudflare Tunnel im Internet verfügbar machen? den Download, die Verifizierung, die Tunnel-Prozesse (in der Sicherheits-Zeitleiste protokolliert), die Nutzungsbedingungen von Cloudflare und die Tatsache, dass jeder mit der zufälligen URL den Dienst erreichen kann. Klicken Sie erneut auf den Globus, um zu stoppen.

Das cloudflared-Binary ist ein gepinntes Release, das zweimal verifiziert wird, bevor es überhaupt läuft: Der SHA-256 des heruntergeladenen Archivs wird mit einem in die App eingebauten Hash verglichen, und eine Developer-ID-Codesignaturprüfung bestätigt Cloudflares Team-ID. Es läuft mit --no-autoupdate.

Warnung: Quick-Tunnel-URLs sind öffentlich für jeden, der sie hat, und der Hostname rotiert, wann immer der Tunnel neu startet (ein Neustart, ein Zurücknehmen/erneutes Bereitstellen oder ein Absturz). Nur HTTP(S)-Ursprünge erhalten einen Globus — SSH und bekannte Raw-TCP- oder Datenbank-Ports (22, 1433, 3306, 3389, 5432, 5672, 5900, 6379, 9092, 11211, 27017) sowie UDP nie, weil ein Browser sie nicht über Cloudflares Edge erreichen könnte. Alle Tunnel eines Arbeitsbereichs werden abgebaut, wenn seine VM ausgesetzt oder heruntergefahren wird. Eine Hash-Diskrepanz beim Download verweigert die Installation, bis der Pin in einem App-Release aktualisiert wird.

OAuth-Callback-Weiterleitung

Eine CLI, die innerhalb einer Arbeitsbereich-VM läuft — gh, gcloud, eine Abonnement-Anmeldung — schließt einen OAuth-Flow oft ab, indem sie einen Browser auf Ihrem Host-Mac öffnet und auf eine Weiterleitung zu http://127.0.0.1:<port>/callback wartet. Bromure überbrückt das automatisch: Der Host bindet den Loopback-Port sowohl auf IPv4 als auch IPv6 und spleißt ihn bei der ersten echten Anfrage über vsock 5010 zum eigenen 127.0.0.1:<port> des Gasts. Die redirect_uri wird nie umgeschrieben, sodass PKCE- und Weiterleitungsvalidierung weiterhin bestehen. Es gibt nichts zu konfigurieren — starten Sie die Anmeldung innerhalb des Arbeitsbereichs, und die Weiterleitung wird in den Gast geliefert.

Der Forwarder baut sich nach 300 Sekunden selbst ab, sodass der Loopback-Port nie unbegrenzt gehalten wird. Wenn der Host-Port bereits belegt ist, verläuft der Flow nativ ohne die Brücke, und spekulative Browser-Preconnects (Sockets, die sich öffnen, aber nie senden) werden ignoriert, sodass sie einen Einmal-Callback-Server nicht blockieren können.

Sicherheitsmodell

Fernzugriff ist mächtig, daher lohnt es sich, bei seinen Grenzen präzise zu sein.

  • Standardmäßig aus, eine Tür. Kein Fernzugriffspfad existiert, bis Sie den SSH-Server aktivieren. Jeder Pfad — menschliches Menü, CLI, Rich Client, Port-Weiterleitungen, Browser-MCP — läuft über diesen einen Server und keinen anderen.
  • Verschlüsselung und Transport. Der gesamte Verkehr ist SSH. Zustands-Stream und Steueraufrufe des Rich Clients, Terminal-Anhänge, Dateiübertragungen, Port-Weiterleitungen und das Browser-MCP-Relay laufen alle innerhalb der SSH-Verbindung. Da swift-nio-ssh keinen Post-Quanten-Schlüsselaustausch hat, gibt ein moderner OpenSSH-Client die Warnung „not using a post-quantum key exchange“ aus; das ist zu erwarten und deutet nicht auf einen Downgrade-Angriff hin.
  • bromure.io ist ein Vermittler, kein Mittelsmann. Im Kontopfad führt bromure.io nur Ihre beiden Geräte zusammen und — wenn kein direkter Peer-to-Peer-Pfad aufgebaut werden kann — leitet undurchsichtige Bytes über ein TURN-Relay (über TLS) weiter. Es terminiert nie die SSH-Sitzung: Der verschlüsselte Tunnel läuft Ende-zu-Ende zwischen Ihren beiden Macs. SSH-Schlüssel werden nur unter den Geräten Ihres eigenen Kontos geteilt (nie mit denen eines anderen Benutzers), jeder Server holt die Geräteschlüssel seines Eigentümers selbst, und Registrieren / Abmelden ist die Art, wie das Vertrauen eines Geräts gewährt und entzogen wird. Ein abgemeldetes oder 90 Tage lang inaktives Gerät wird nicht mehr autorisiert.
  • Wer sich anmelden kann. Nur der exakte macOS-Benutzer, der die App gestartet hat. Die Passwort-Authentifizierung wird gegen OpenDirectory verifiziert (keine Entfernte Anmeldung, keine PAM-Änderungen, keine Administratorrechte), und die Public-Key-Authentifizierung akzeptiert nur Schlüssel, die Sie registriert haben. Passwortversuche werden pro Quell-IP ratenbegrenzt; Schlüssel nicht.
  • Was eine Sitzung tun kann. Eine menschliche Anmeldung kann nur das Remote-Menü erreichen — nie eine Shell — sodass sie Arbeitsbereiche erstellen, konfigurieren und bedienen kann, aber keine beliebigen Host-Befehle ausführen kann. Die vier Maschinen-Verben des Rich Clients sind ähnlich eng gefasst: eine Steuerungssocket-Brücke, eine Weiterleitung zu einem Gast im vmnet-Subnetz und ein Browser-MCP-Relay. Weiterleitungen zum Host selbst, zum Gateway oder zum Internet werden verweigert.
  • Geheimnisse verlassen nie den Host. Remote-Einstellungen werden mit geleerten Geheimnissen gelesen (Schlüssel von Modellanbietern geschwärzt) und so gespeichert, dass Geheimnisse erhalten bleiben; API-Schlüssel, Tokens, Abonnement-Anmeldungen und MCP-Umgebungsgeheimnisse bleiben auf dem entfernten Mac.
  • Trust on First Use. Der Rich Client pinnt den Hostschlüssel des Remotes pro Endpunkt beim Erstkontakt und warnt lautstark bei jeder späteren Änderung.
  • Vom Gast nicht fälschbare Zustimmung. MITM-Zustimmungs-Prompts, die von einem laufenden Agenten ausgelöst werden, werden auf der Host-Seite der Terminal-Pumpe gerendert, wo ein kompromittierter Gast sie weder sehen noch fälschen kann; jeder Timeout oder jedes Trennen löst sich zu Ablehnen auf. Siehe Umgang mit Remote-Zustimmung.

Fehlerbehebung

SymptomWahrscheinliche UrsacheWas zu tun ist
Aktivierung gibt einen Fehler zurückBase-Image fehlt oder wird noch installiertDer Server kann nicht starten, bis das Base-Image vorhanden ist. Schließen Sie die Installation ab und aktivieren Sie erneut.
ssh verbindet sich, sagt aber, mit ssh -t erneut zu verbindenKein TTY wurde angefordertDas Remote-Menü benötigt ein Terminal; fügen Sie -t hinzu (oder verwenden Sie ssh -t -p 2222 <user>@<mac>).
OpenSSH gibt „not using a post-quantum key exchange" ausswift-nio-ssh hat keinen PQ-SchlüsselaustauschZu erwarten und harmlos — die Verbindung ist weiterhin verschlüsselt.
Eine Per-Adresse-Verbindung fragt immer wieder nach einem PasswortDer Schlüssel dieses Macs ist nicht auf dem Remote registriertLassen Sie eine Passwortanmeldung ihn automatisch registrieren oder führen Sie bromure-cli remote key add '<this Mac's key>' auf dem Remote aus (Schlüssel dieses Macs anzeigen kopiert ihn).
Eine bromure.io-Verbindung fragt noch nach einem PasswortDie Schlüsselregistrierung hat dieses Gerät auf diesem Server noch nicht autorisiertPasswortlos ist hier automatisch — prüfen Sie, dass Sie auf beiden Macs bei bromure.io angemeldet sind, der Server Fernzugriff an hat und beide einen aktuellen Build ausführen (der Server veröffentlicht seinen Login und holt Ihre Schlüssel). Geben Sie nach dem Aktivieren von Fernzugriff ein paar Sekunden.
Meine Server · bromure.io ist leerNicht angemeldet, oder der Server wirbt nichtMelden Sie sich an (App-Namen-Menü → Bei bromure.io anmelden…); aktivieren Sie auf dem Remote Fernzugriff, damit er Herzschläge sendet und erscheint. Eine ausgegraute Zeile bedeutet, dass er keine Herzschläge mehr sendet.
„Verbindung … über bromure.io konnte nicht hergestellt werden"Kein direkter oder relayter Netzwerkpfad zwischen den beiden MacsBestätigen Sie, dass beide bromure.io erreichen können; das Relay benötigt erreichbares turns:5349. Versuchen Sie es erneut — ein Pfad wird beim nächsten Versuch neu probiert.
„… über bromure.io erreicht, aber seine SSH-Eingangstür antwortete nicht"Fernzugriff wurde auf dem Remote ausgeschaltetAktivieren Sie Fernzugriff auf dem Remote-Mac erneut.
„Das bromure.io-Gerät dieses Macs wurde widerrufen. Melden Sie sich erneut an."Dieses Gerät wurde abgemeldet / widerrufen (durch Sie, die Web-Konsole oder 90 Tage Inaktivität)Erneut registrieren: App-Namen-Menü → Bei bromure.io anmelden….
Rotes Neuem Schlüssel vertrauen & Fortfahren-BlattDer Hostschlüssel des Remotes hat sich seit dem Pinnen geändertVerifizieren Sie außerhalb des Bandes; fahren Sie nur fort, wenn Sie wissen, warum sich der Schlüssel geändert hat (Neuinstallation, neuer Mac) — andernfalls könnte es ein Man-in-the-Middle sein.
Aktive Verbindungen brechen nach dem Bearbeiten von Schlüsseln abDas Hinzufügen oder Entfernen eines autorisierten Schlüssels startet den Listener neuZu erwarten; verbinden Sie sich erneut.
Browser-Bereich bleibt leerDer SOCKS-Forwarder oder das Subnetz ist noch nicht bereitWarten Sie auf die erste Zustandsaktualisierung des Spiegels; stellen Sie sicher, dass die Maschine läuft und auf diesem Mac das Browser-Image installiert ist.
Eine Weiterleitung wird verweigertDas Ziel ist kein Gast im vmnet-Subnetz des RemotesWeiterleitungen können nur Arbeitsbereich-VMs erreichen, nie den Host, das Gateway oder das Internet.
Tunnel-Schalter hängt bei Warte auf Genehmigung…Der privilegierte Helfer ist noch nicht genehmigtGenehmigen Sie Bromure Agentic Coding in Systemeinstellungen → Allgemein → Anmeldeobjekte (benötigt Admin). Ohne ihn funktioniert SOCKS weiterhin.
Grid-Layout-Bearbeitungen greifen nicht auf dem RemoteDas Remote ist headlessGrid-Bearbeitungen benötigen ein geöffnetes GUI-Fenster auf dem Remote; alles andere wird weiterhin gespiegelt.

Dateien, Ports und Umgebungsvariablen

Serverseitiger Zustand lebt unter ~/Library/Application Support/BromureAC/remote/: hostkey_ed25519 (0600) und dessen .pub, authorized_keys (0600) und die optionale overlay-key-Überschreibung. Die Identität und der Zustand des Rich Clients leben unter ~/Library/Application Support/BromureAC/remote-client/: id_ed25519(.pub) (Kommentar bromure-ac-fatclient), known_hosts (TOFU-Pins), hosts.json (gespeicherte Server) und pro-Host-Spiegelungspersistenz unter hosts/<host-UUID>/. Das gesamte Support-Verzeichnis wird unter CFFIXED_USER_HOME verlagert.

Port / SchnittstelleRolle
TCP 2222 (konfigurierbar, ≥ 1024)Der eingebettete SSH-Server, Bind standardmäßig 0.0.0.0.
Ausgehend TCP 443 + turns:5349Nur bromure.io-Kontopfad. Erreichen Ihres Kontos (Geräteverzeichnis, Rendezvous) und, wenn kein direkter Peer-to-Peer-Pfad aufgebaut werden kann, das TURN-Relay über TLS. Beide müssen von jedem Gerät für den Kontopfad erreichbar sein; ohne Bezug zum Per-Adresse-Pfad.
Gast-vsock 5010Immer aktives Loopback-Relay in jeder VM — der Pfad für Port-Weiterleitungen und OAuth-Callback-Auslieferung.
Gast-vsock 5830Der Browser-MCP-Stream des Arbeitsbereich-Agenten, weitergeleitet an den Browser-Bereich des Rich Clients.
Ephemerer Port, gebunden an 0.0.0.0Hostspezifischer SOCKS5-Forwarder (peer-gefiltert auf Loopback und das 192.168.127.x-Browser-Subnetz).
192.168.127.0/24Das gepinnte lokale Browser-VM-Subnetz des Rich Clients.
100.64.<n>.0/24CGNAT-Alias-Subnetze, die bei einer Flotten-Subnetz-Kollision zugewiesen werden.

Die relevanten UserDefaults-Schlüssel (Domäne io.bromure.agentic-coding) sind remoteAccess.enabled, remoteAccess.port, remoteAccess.bindAddress, remoteAccess.passwordAuth, remoteAccess.pubkeyAuth, fatclient.tunnel.<host-UUID> und cloudflareTunnel.consented. Zu den Diagnose-Umgebungsvariablen gehören BROMURE_OVERLAY_KEY (Tastenkombination für das Remote-Menü), BROMURE_FATCLIENT_LOG (ausführliches Rich-Client-Logging) und BROMURE_FATCLIENT_UTUN (erzwingt die Aktivierung des systemweiten Tunnels — der Schalter in der Symbolleiste ist der Produktweg). Die vollständige CLI-Referenz, einschließlich der versteckten Hilfsbefehle __forward, __forward-socks, __dial und __attach-window, finden Sie unter CLI, API & MCP.