Acceso remoto y clientes
Una máquina (un espacio de trabajo, en el editor de ajustes) vive en un solo Mac, pero la persona que quiere manejarla no siempre está sentada frente a ese Mac. Bromure Agentic Coding se puede alcanzar de forma remota, y cada vía remota pasa por una única puerta de entrada SSH, opcional y desactivada por defecto. Actívala y tendrás tres formas de acceso: una persona puede conectarse por ssh desde cualquier terminal y llegar a un menú; puedes gestionar la propia puerta de entrada desde la línea de comandos; y un cliente enriquecido — otro Mac con la app, o Bromure Remote en iPhone, iPad o Apple Vision Pro — puede conectarse y replicar toda la instancia — sus sesiones, salas y Centralita, máquinas, terminales y tableros — en una ventana en vivo.
El cliente enriquecido llega a un servidor de dos maneras. En la misma red lo añades directamente por dirección. Desde cualquier otro lugar inicias sesión en una cuenta de bromure.io y eliges el servidor de un directorio: bromure.io presenta los dos dispositivos entre sí y luego hablan de par a par, sin reenvío de puertos, sin VPN y sin ninguna dirección que recordar — y una vez que has iniciado sesión, tus propios dispositivos se autorizan mutuamente, de modo que la conexión es sin contraseña y sin configuración manual de claves.
Este capítulo cubre la activación del acceso remoto en el anfitrión, cada uno de los puntos de entrada, cómo el cliente enriquecido replica un remoto (por dirección y mediante bromure.io), la edición de las Preferencias de un remoto, los clientes de iPhone, iPad y Vision Pro, el acceso a servicios dentro de las VM remotas, la exposición de un servidor de desarrollo a internet y el modelo de seguridad que lo mantiene todo a salvo. La inscripción a escala de flota y la telemetría en la nube son un sistema completamente distinto — consulta Empresa. La referencia completa de comandos está en CLI, API y MCP.
Las tres formas de acceso
Todo lo que sigue depende de que la puerta de entrada SSH esté habilitada (está desactivada de forma predeterminada). Una vez en ejecución, el mismo servidor atiende a los tres públicos:
| Forma de acceso | Quién la usa | Qué obtienes |
|---|---|---|
| SSH simple | Una persona en cualquier terminal (ssh -p 2222 you@mac) | El menú remoto — una TUI de estilo curses. Nunca es accesible una shell sin restricciones. |
La CLI bromure-cli remote | Tú, en el propio anfitrión | Gestiona la puerta de entrada: habilitar/deshabilitar, claves, estado. Consulta Habilitar el acceso remoto en el anfitrión. |
| El cliente enriquecido | Otro Mac con la app, o Bromure Remote en iOS / iPadOS / visionOS | Una réplica en vivo de la instancia remota, con ediciones bidireccionales — accesible por dirección en una LAN o a través de una cuenta de bromure.io desde cualquier lugar. |
El servidor está integrado — es la biblioteca swift-nio-ssh de Apple incorporada en la app, no el propio sshd de macOS. Esa distinción importa: como la app ejecuta su propio servidor, puede verificar la contraseña de tu cuenta de macOS a través de OpenDirectory sin que nunca tengas que habilitar Inicio de sesión remoto en Configuración del Sistema y sin derechos de administrador. Escucha únicamente al usuario exacto de macOS que ejecuta la app, y fuerza cada inicio de sesión interactivo hacia el menú remoto. Las únicas excepciones orientadas a máquina son cuatro comandos en lista blanca que usa el cliente enriquecido (bromure-fatclient/1 control, forward <ip> <port>, forward-udp <ip> y browser-mcp <vm>); cualquier otra cosa que escriba un humano se comporta como un inicio de sesión y cae en el menú.
Nota: La ventana de Acceso remoto describe el servidor como "una instancia del servidor SSH del sistema propiedad de la app". Con mayor precisión, es un servidor swift-nio-ssh integrado, deliberadamente no el
sshdde macOS — eso es exactamente lo que le permite funcionar sin Inicio de sesión remoto ni derechos de administrador.
Habilitar el acceso remoto en el anfitrión
El acceso remoto está desactivado hasta que lo actives, y puede gestionarse de dos formas equivalentes: la ventana Acceso remoto o la CLI bromure-cli remote. Ambas escriben en el mismo sitio, así que un cambio realizado en una se refleja en la otra y se aplica en vivo.
La ventana Acceso remoto
Abre Bromure Agentic Coding (el menú con el nombre de la app) → Acceso remoto…. El título de la ventana es Acceso remoto. Un punto verde o gris indica sshd running o sshd stopped; cuando el servidor está activo, aparece bajo el encabezado una cadena de conexión copiable con la forma ssh -p <port> <user>@<host>.
| Sección | Campo | Propósito | Predeterminado |
|---|---|---|---|
| Encabezado | Habilitar acceso remoto por SSH | Inicia y detiene el servidor. | Desactivado |
| Escucha | IP de vinculación | En qué interfaz escuchar. 0.0.0.0 = todas las interfaces; 127.0.0.1 = solo este Mac. | 0.0.0.0 |
| Escucha | Puerto | Puerto TCP de escucha; debe ser ≥ 1024 (un proceso sin privilegios de root no puede vincular puertos privilegiados). | 2222 |
| Autenticación | Contraseña de la cuenta de macOS | Acepta la contraseña de inicio de sesión de macOS del usuario que ejecuta la app (verificada mediante OpenDirectory). | Activado |
| Autenticación | Clave pública | Acepta claves de la lista de claves autorizadas siguiente. | Activado |
| Clave de anfitrión del servidor | huella | La huella de la propia clave de anfitrión ed25519 del servidor, para verificación fuera de banda. Indica (generada al habilitar por primera vez) hasta el primer uso. | — |
| Claves públicas autorizadas | lista | Claves públicas ssh-ed25519 / ecdsa inscritas. Añade pegando una línea de clave; elimina con el icono de papelera. Indica No hay claves inscritas. cuando está vacía. | vacía |
Edita la IP de vinculación o el Puerto y pulsa Return para aplicar el cambio en vivo. La sección Autenticación indica Verificada contra <user> — el usuario que ejecuta bromure-ac. para que quede claro cuya contraseña abre la puerta.
Advertencia: Al menos un método de autenticación debe permanecer habilitado — no puedes desactivar a la vez la autenticación por contraseña y por clave pública. Pegar una clave no válida se rechaza con No es una clave pública válida. Añadir o eliminar una clave autorizada reinicia el proceso de escucha, lo que corta cualquier conexión en vivo.
La CLI bromure-cli remote
La CLI se comunica con la app en ejecución a través de su socket de control exclusivo del propietario, de modo que la app sigue siendo la única fuente de verdad. Es la forma más rápida de habilitar el acceso en un Mac sin pantalla al que has llegado a través de una shell existente.
| Comando | Qué hace |
|---|---|
bromure-cli remote (o remote status) | Imprime el estado habilitado/en ejecución, la vinculación y el puerto, los métodos de autenticación, la huella de la clave de anfitrión, el usuario de inicio de sesión, una cadena de conexión lista para usar y la lista numerada de claves autorizadas. |
bromure-cli remote enable [--port N] [--bind IP] [--password|--no-password] [--pubkey|--no-pubkey] | Inicia el servidor (lanzando automáticamente el agente de la app si es necesario). Predeterminados: puerto 2222, vinculación 0.0.0.0, ambos métodos de autenticación activados. |
bromure-cli remote disable | Detiene el servidor y persiste el estado de desactivado. |
bromure-cli remote key add <path-or-key-text> | Inscribe una clave pública desde una ruta de archivo o una línea de clave pegada; imprime su huella. |
bromure-cli remote key ls | Lista las claves autorizadas con un índice de base 1, huella y comentario. |
bromure-cli remote key rm <index|fingerprint> | Elimina una clave por índice o por una subcadena de huella. |
remote enable rechaza la operación si pasas a la vez --no-password y --no-pubkey, y da error mientras falta una imagen base o se está instalando. Cuando la app no está en ejecución, status, disable y key ls imprimen No hay ningún agente bromure-ac en ejecución.
Nota: El servidor no se iniciará mientras la imagen base esté ausente o todavía instalándose — al habilitarlo se devuelve entonces un error accionable en lugar de un no-op silencioso. Esto es cierto tanto en el lanzamiento como al accionar el interruptor. Instala o termina de instalar primero la imagen base.
Claves de anfitrión, huellas y confianza
En la primera habilitación, el servidor genera una clave de anfitrión ed25519. Su huella — mostrada en la fila Clave de anfitrión del servidor y por bromure-cli remote status, con la forma 256 SHA256:… bromure-ac-remote (ED25519) — es lo que un cliente que se conecta verifica para asegurarse de que ha llegado al Mac correcto. Entrega esta huella a quien se conecte (o compruébala tú mismo en la hoja de primer contacto del cliente enriquecido) para que un intermediario no pueda suplantar al anfitrión. Consulta confianza en el primer uso para saber cómo la fija el cliente enriquecido.
Limitación de frecuencia
Los intentos de contraseña se limitan por IP de origen mediante un cubo de tokens: cinco intentos a velocidad plena, luego una recarga de aproximadamente un intento cada dos segundos, con el retraso impuesto limitado a ocho segundos. Los intentos se retrasan, nunca se rechazan, y nadie queda bloqueado nunca; una IP ruidosa no puede ralentizar a otra. La autenticación por clave pública nunca se limita.
Iniciar sesión mediante SSH simple
Cualquier terminal puede llegar al anfitrión con ssh -p 2222 <user>@<mac>. En lugar de una shell, la conexión aterriza en el menú remoto — una TUI de estilo curses (internamente bromure-ac __remote-menu) forzada sobre cada inicio de sesión humano. A través de él nunca es accesible una shell sin restricciones.
El menú es anterior al rediseño centrado en las sesiones y se organiza en torno a las máquinas: una lista de Espacios de trabajo con glifos de estado en vivo (● en ejecución, ◌ arrancando, ⏸ suspendido, ○ apagado), más las secciones Modelos (los modelos instalados y el catálogo en el dispositivo) y Trace (resúmenes, nombres de host, fugas). Desde él puedes:
- Crear un espacio de trabajo con un formulario de una sola pantalla, con una puerta Full settings… hacia formularios de ajustes por panel.
- Iniciar, suspender, terminar, reiniciar o eliminar cualquier espacio de trabajo.
- Editar los ajustes. Los secretos se muestran como
•••• (set); dejar un secreto en blanco conserva el valor guardado. - Gestionar worktrees — crear, fusionar, adjuntar un terminal o descartar.
- Generar claves SSH, alternar Fusion y el enrutamiento de modelos, y explorar resúmenes de trazas.
- Adjuntar a cualquier pestaña de tmux o a un contenedor Docker en ejecución.
Nota: Los formularios de ajustes del menú no pueden editar el tablero Modelos. Su formulario Modelos es de solo lectura: lista los proveedores del servidor (clave de API o suscripción) e indica si el espacio de trabajo sobrescribe los ajustes globales. Elige proveedores y modelos desde un Mac, en Preferencias o en las Preferencias remotas de una réplica.
Navega con las teclas de flecha, Enter para seleccionar, y q o Esc para retroceder; Salir (desconectar) termina la sesión. Seleccionar Adjuntar entrega el terminal al tmux del invitado; Ctrl-b d se desacopla de vuelta al menú. Mientras estás adjuntado, un atajo de teclado superpuesto (predeterminado Ctrl-]) abre un controlador del lado del anfitrión — cambiar de pestaña, abrir una nueva pestaña, gestionar worktrees, alternar Fusion o el enrutamiento, editar ajustes, reiniciar, suspender o desconectar — sin que la pulsación llegue nunca al invitado. Adjuntarse a un contenedor solicita la shell (Enter = sh).
Nota: El menú necesita un terminal real. Conectarse sin TTY muestra una sugerencia para volver a conectar con
ssh -t. Iniciar un espacio de trabajo en frío espera hasta unos 20 segundos a la sesión tmux del invitado antes de adjuntarse.
El atajo superpuesto es configurable en el Mac anfitrión (la máquina a la que se conecta) mediante el archivo ~/Library/Application Support/BromureAC/remote/overlay-key — las formas aceptadas son C-], ^], 0x1d o 29 — o la variable de entorno BROMURE_OVERLAY_KEY.
Replicar un remoto con el cliente enriquecido
El cliente enriquecido convierte la copia de Bromure Agentic Coding de este Mac — o Bromure Remote en iPhone, iPad o Apple Vision Pro — en una réplica en vivo de una remota. En un Mac obtienes una ventana completa titulada Remote — <name> que se ve y funciona como la ventana principal local: el inicio de las sesiones, las salas y la Centralita, las máquinas, los tableros de tareas y de automatizaciones. Todo lo que haces se ejecuta en el remoto y vuelve reflejado.
Conexión
Abre Espacios de trabajo › Conectar a un Bromure remoto… (⇧⌘K). La ventana resume la elección: «Refleja otro Mac que ejecute Bromure (su cuadrícula, espacios de trabajo, pestañas y automatizaciones). Inicia sesión para acceder a tus servidores desde cualquier lugar, o añade uno directamente por su dirección en tu LAN.» Ambas vías llevan a la misma ventana de réplica; solo difieren en cómo se encuentran y se autorizan los dos dispositivos.
Nota: El handshake SSH se adapta al enlace: los presupuestos de conexión y de handshake escalan con el tiempo de ida y vuelta medido, de modo que un enlace de alta latencia (wifi de hotel, red móvil, un continente de distancia) conecta despacio en lugar de agotar el tiempo de espera.
Por dirección (misma red)
Usa esto en una LAN donde conoces la dirección del Mac y no necesitas una cuenta de bromure.io.
- En el Mac remoto, habilita el acceso remoto (la ventana Acceso remoto o
bromure-cli remote enable). - En este Mac, haz clic en +, introduce un Nombre (por ejemplo,
rack mini), una Dirección, un Puerto (predeterminado2222) y un Usuario remoto, luego haz clic en Conectar. Las filas guardadas muestranuser@address:porty la hora de la última conexión. - En el primer contacto, una hoja muestra la huella de la clave de anfitrión SSH del remoto. Verifícala contra la ventana Acceso remoto del remoto, luego haz clic en Confiar y continuar. La fijación se recuerda para este extremo; las conexiones posteriores son silenciosas a menos que la clave cambie, en cuyo caso el botón se pone rojo e indica Confiar en la nueva clave y continuar — un posible intermediario.
- El cliente intenta la autenticación por clave pública con la clave dedicada de este dispositivo. Si aún no está autorizada, recurre a la contraseña de inicio de sesión de macOS del usuario remoto (botón: Iniciar sesión); un inicio de sesión con contraseña correcto inscribe la clave de este dispositivo en el remoto a través del túnel, así que cada conexión posterior es sin contraseña. Para autorizar de antemano sin escribir nunca una contraseña, haz clic en Mostrar la clave de este Mac y ejecuta
bromure-cli remote key add '<this Mac's key>'en el remoto.
Tras la primera conexión, haz doble clic en un servidor guardado para reconectarte con un clic; el menú contextual de cada fila ofrece Conectar, Editar… y Quitar. Bromure Remote en iPhone y iPad ofrece el mismo flujo en Añadir un servidor por dirección.
A través de una cuenta de bromure.io (desde cualquier lugar)
Iniciar sesión en bromure.io permite a un cliente alcanzar tus servidores a través de redes distintas — del Wi-Fi de una cafetería a un Mac en casa — sin reenvío de puertos, sin VPN y sin direcciones que recordar. bromure.io solo presenta a los dos dispositivos y retransmite bytes cuando no es posible una ruta directa; la sesión SSH en sí permanece cifrada de extremo a extremo entre ellos.
- Inicia sesión. En un Mac, elige Iniciar sesión en bromure.io… en el menú con el nombre de la app e inicia sesión en tu navegador (o despliega la sección del código e introduce un código de inscripción de seis palabras y un Nombre del dispositivo). En Bromure Remote, inicia sesión desde su pantalla de inicio. Todos los dispositivos que inscribes comparten la misma cuenta.
- En el Mac remoto, habilita el Acceso remoto. Un servidor aparece en el directorio solo mientras su puerta de entrada está activa y está enviando latidos a bromure.io.
- En el cliente, abre Conectar a un Bromure remoto…. Tus servidores aparecen en Mis servidores · bromure.io con un punto de conexión en vivo y la hora en que se vieron por última vez. Haz doble clic en uno (o selecciónalo y haz clic en Conectar). El estado indica «Connecting to
<name>via bromure.io…» mientras se establece una ruta entre pares — directa, con asignación de puertos del router o retransmitida — y luego se abre la réplica.
En esta ruta no hay ninguna dirección que escribir, ninguna hoja de clave de anfitrión ni ninguna contraseña: tus propios dispositivos confían entre sí a través de tu cuenta (abajo), y la clave de anfitrión se fija automáticamente.
Sin contraseña entre tus propios dispositivos
Una vez que has iniciado sesión, cada dispositivo que inscribes comparte su identidad SSH a través de tu cuenta, de modo que cualquiera de tus dispositivos alcanza cualquiera de tus servidores sin contraseña y sin bromure-cli remote key add manual:
- Cada dispositivo publica su clave pública SSH en bromure.io al arrancar. Cada uno de tus servidores (con Acceso remoto activado) obtiene las claves de tus dispositivos y las instala en su
authorized_keysen segundos, así que un dispositivo que acabas de inscribir queda autorizado casi de inmediato. - Un servidor también publica el inicio de sesión de macOS con el que se ejecuta, de modo que el cliente lo marca automáticamente como el usuario correcto (el mismo campo que la ruta por dirección te pide rellenar).
- Las claves están limitadas a tus propios dispositivos — nunca a los de otro usuario, ni siquiera dentro de la misma organización.
- Cerrar sesión en un dispositivo lo retira: su clave se elimina de tus servidores y desaparece del directorio, de modo que volver a iniciar sesión nunca deja un duplicado obsoleto. Un dispositivo sin usar durante 90 días también deja de estar autorizado hasta que vuelve a dar señales. Y desde la consola web de bromure.io puedes cerrar la sesión de cualquiera de tus dispositivos a demanda.
Nota: El cliente enriquecido genera su propio par de claves ed25519 dedicado (comentario
bromure-ac-fatclient) la primera vez que lo usas — esta es la clave que se publica en tu cuenta. En una conexión por dirección, la fijación de la clave del anfitrión pertenece al punto de conexión (address:port), no al usuario, así que editar la dirección o el puerto de un servidor guardado descarta la fijación y vuelve a mostrar la hoja de huella; una conexión bromure.io fija en cambio la clave del par a través de la cuenta.
La ventana de réplica
La ventana de réplica se abre automáticamente tras una conexión correcta. Es el inicio de las sesiones del Mac remoto: la misma barra lateral (sesiones, salas, la Centralita, tareas, automatizaciones, Máquinas virtuales con los clústeres de Kubernetes y registros que haya), el mismo escenario y la misma cabecera. Inicia una sesión con Nueva sesión (⌘N), chatea con ella, responde a sus preguntas, abre una sala con su cuadrícula de chats o habla con la Centralita del remoto — todo ocurre en el remoto, y la paleta ⌘K también funciona.
La cabecera tiene los mismos controles que la ventana local: la píldora Linux para el terminal de una sesión, el menú de la máquina con el nombre de la máquina (Ajustes…, Detalles de la máquina, Copiar dirección IP, Inspeccionar traza, Abrir en su propia ventana, Reiniciar), el rayo de Fusion, Mostrar u ocultar el navegador agéntico (⌃⌘B) y Mostrar u ocultar el panel Archivos (⌃⌘E). Una ventana de réplica añade un control propio, el interruptor del túnel de red (consulta El túnel de red de todo el sistema). Los terminales se muestran con la apariencia propia de la máquina.
Algunas cosas se comportan de forma especial a través de la réplica:
- Ajustes… abre el mismo editor de ajustes que en local, respaldado por una lectura con los secretos en blanco y un guardado que preserva los secretos (consulta Los secretos permanecen en el anfitrión). Su panel Modelos edita la sobrescritura propia de esa máquina remota sobre los ajustes de modelos del Mac remoto. Generate new SSH key funciona y te muestra la nueva clave pública.
- El panel Archivos (⌃⌘E) explora los archivos de la máquina a través del túnel. Sustituye a la ventana independiente de explorador de archivos de versiones anteriores. Consulta Máquinas.
- Reiniciar funciona como en la propia ventana del servidor: un reinicio limpio tras ¿Reiniciar «…»?, o uno forzado si mantienes pulsada ⌥ al elegirlo (consulta Reiniciar una máquina); la orden se envía entonces al servidor.
- Abrir en su propia ventana abre una ventana de terminal adicional en vivo que se cierra sola si la máquina se detiene.
Si el remoto ejecuta un Bromure antiguo sin la API de sesiones, la réplica vuelve a la disposición antigua centrada en las máquinas.
Los menús actúan sobre la réplica en primer plano
Cuando una ventana de réplica es la ventana activa, estos elementos de menú actúan sobre el Mac remoto en lugar de sobre este:
| Elemento | Efecto en el Mac replicado |
|---|---|
| Nueva sesión… (⌘N) | Abre la pantalla de nueva sesión de la réplica. |
| Espacios de trabajo › Nueva sala… | Crea la sala en el remoto. |
| Sala siguiente (⌃⌘R) | Recorre las salas del remoto (las salas archivadas se omiten). |
| Espacios de trabajo › Infraestructura › Crear clúster de Kubernetes… / Crear registro… | Abre la hoja de creación en la réplica, de modo que el clúster o registro se crea en el remoto. |
| Preferencias… (⌘,) | Abre Preferencias con el remoto como destino (abajo). |
Preferencias remotas
Pulsa ⌘, con una ventana de réplica en primer plano y Preferencias se abre con los valores predeterminados de ese Mac, con el título Preferencias — <host>. Siempre que haya una ventana de réplica abierta, un selector Ajustes para: en la parte superior de Preferencias alterna entre Este Mac y cada remoto conectado; cada destino tiene su propio editor, así que los borradores nunca pasan de una máquina a otra. Mientras se cargan los ajustes del remoto, la ventana indica «Cargando las preferencias de <host>…»; si falla, muestra No se pudieron cargar las preferencias remotas con Reintentar.
Todo hace el viaje de ida y vuelta por el remoto: los secretos llegan en blanco y se conservan salvo que escribas uno nuevo. El panel Modelos edita los ajustes de modelos globales del remoto — las claves de API se muestran ocultas — y los cambios se guardan al hacer clic en Guardar, a diferencia de las Preferencias locales, donde el tablero Modelos guarda a medida que editas (consulta Modelos y proveedores). Los ajustes de la app propios de este Mac — el panel Automatización y las secciones Subred del espacio de trabajo y Transporte remoto de Recursos — no se muestran para un remoto, ni en el editor de una máquina remota.
Iniciar sesión en proveedores de forma remota
Los inicios de sesión por suscripción funcionan de principio a fin desde el cliente. Sign in with proveedor ejecuta la captura en el remoto, pero la página de inicio de sesión del proveedor (o la URL del código de dispositivo) se abre en tu navegador; para un proveedor que nunca muestra una URL, el cliente muestra el terminal de la VM de inicio de sesión para que termines de forma interactiva. Un inicio de sesión lanzado desde los ajustes de una máquina remota plantea la pregunta de alcance — Todos los espacios de trabajo o Solo este espacio de trabajo — en tu pantalla; si nadie responde, se queda en Solo este espacio de trabajo. Un inicio de sesión lanzado desde las Preferencias remotas siempre lo comparten todas las máquinas del remoto. Cerrar sesión… también funciona de forma remota.
Ramas y revisión de forma remota
Nueva rama…, Revisar cambios y Fusionar en rama funcionan desde la réplica para una sesión con carpeta propia, exactamente igual que en la pantalla del propio remoto (consulta Ramas y revisión). En Bromure Remote, el menú de una sesión ofrece Nuevo worktree….
Pedir algo a una sesión en el Mac replicado
Mientras este Mac replica un remoto, una sesión de aquí puede pedir algo a una sesión del remoto mediante su @apodo: las sesiones remotas aparecen en la lista @ del compositor y ante los agentes con el nombre de su anfitrión, y los archivos adjuntos a una petición viajan por el túnel hasta la bandeja de entrada del par. Las respuestas, las correcciones de rumbo y el cierre vuelven por el mismo camino. La dirección inversa — los agentes del remoto pidiendo algo a una sesión de este Mac — no está disponible, porque el remoto no tiene canal de vuelta hacia el cliente.
Qué se replica
La réplica muestra cada máquina con su estado de ejecución en vivo, sesiones y salas, pestañas y ramas, la Cuadrícula, automatizaciones, el tablero de tareas de programación, los detalles y constantes vitales de las máquinas, el panel de Docker, los clústeres de Kubernetes y registros, terminales interactivos en vivo y los eventos de seguridad del remoto, que aparecen en la Cronología de seguridad junto a los de este Mac — su filtro de máquinas ofrece Todas las máquinas, Este Mac y cada anfitrión replicado. Los modelos en el dispositivo y sus descargas se ejecutan en el remoto, nunca en el cliente. Las ediciones convergen en todos los clientes conectados: iniciar, detener y reiniciar máquinas, operaciones de sesiones y salas, operaciones de pestañas, ediciones de la Cuadrícula (disposición completa, gana el último que escribe), ediciones de automatizaciones, el interruptor de Fusion, acciones de Docker, guardados de ajustes y transferencias de archivos.
La réplica sigue al remoto mediante un canal push (GET /state/subscribe) sobre un puente tunelizado por SSH hasta el socket de control del remoto; mientras el canal push está activo, el cliente solo vuelve a leer el estado completo cada 5 segundos como latido, y pasa a leerlo cada 0,75 segundos si el canal se cae. Las llamadas de control cortas se multiplexan sobre una conexión SSH por anfitrión; las conexiones de terminal interactivas usan sus propias conexiones SSH dedicadas, porque un canal multiplexado almacenaría en búfer la salida inmediata que necesita un terminal. En una conexión bromure.io, el mismo puente y los mismos flujos de terminal van por la ruta entre pares, y la réplica se comporta de forma idéntica.
Los chats también ahorran enlace. La primera vez que abres el chat de una sesión remota, solo carga los ~1,5 MB más recientes de la conversación; desplazarte hacia arriba hasta Cargar conversación anterior obtiene las partes más antiguas. Un chat que vuelves a abrir — al regresar a una sesión, o una sala que se muestra de nuevo — parte del historial ya descargado y solo obtiene los mensajes nuevos.
Algunas operaciones no están disponibles desde el cliente enriquecido:
- Las ediciones de la disposición de la Cuadrícula necesitan una ventana gráfica abierta en el remoto. Un remoto totalmente sin interfaz (app en ejecución, sin ventana principal) replica todo lo demás, pero no puede aceptar un cambio de disposición.
- Importar una clave SSH desde un archivo está oculto en los editores de ajustes remotos.
Bromure Remote en iPhone, iPad y Apple Vision Pro
Bromure Remote es una réplica solo de cliente, a la que se llega exactamente igual (inicia sesión y elige un servidor, o añade uno por dirección). Está centrada en las sesiones, como en el Mac:
- iPhone — una lista Sesiones con el número de sesiones que te necesitan, una pantalla de nueva sesión («¿En qué puedo ayudarte?») y una pantalla por sesión: su chat, un botón Linux para su terminal y un menú con Reanudar, Renombrar…, Nuevo worktree…, los ajustes de la máquina, Archivar (o Terminar y archivar), Terminar sesión y Eliminar sesión. Una sala se abre con una pestaña por sesión, entre las que se desliza, con la Centralita de la sala.
- iPad — una barra lateral permanente con sesiones, salas y máquinas; una sala muestra su cuadrícula de chats como en el Mac.
En ambos, la lista sigue el orden de la barra lateral del Mac: Nueva sesión primero, Tareas de código y Automatizaciones justo debajo, y luego las sesiones. Las máquinas se dividen en Máquinas virtuales (con la Cuadrícula) y Native Machines — los Mac Sidecar que el Mac remoto ha conectado, que solo se muestran cuando hay alguno; una máquina nativa ofrece Nuevo terminal. En el iPad, Nueva sesión sigue visible encima de la sección Sesiones plegable.
Cuando un Mac remoto se niega a iniciar una sesión (en un Mac Sidecar sin ese agente, por ejemplo), el cliente muestra el motivo del Mac remoto en lugar de no hacer nada.
- Apple Vision Pro — la disposición del iPad, más ventanas espaciales: fija cualquier terminal como ventana propia en cualquier lugar de la habitación, abre la Cuadrícula como una ventana de escenario dedicada o convierte toda la cuadrícula en ventanas flotantes con Pin All as Windows.
En una sala, un único compositor en la parte inferior tiene un selector Para — la Centralita de la sala o cualquier sesión de ella — y un menú de adjuntos (Fototeca, Elegir archivos, Pegar imagen); los adjuntos se suben a la máquina del destino al enviar. En iPhone y iPad, una sesión que necesita tu intervención puede avisarte con una notificación push mientras la app está en segundo plano; al tocarla se abre esa sesión. El tablero Modelos no está disponible en estos dispositivos; cambia de modelo desde un Mac.
Prompts de decisión pendientes
Algunas acciones plantean una decisión en el remoto — una ampliación del almacenamiento de la carpeta personal, un restablecimiento por deriva de la imagen base, el borrado de una VM comprometida, una pregunta sobre la acción de cierre, la pregunta de alcance de un inicio de sesión en un proveedor, o una alerta de exfiltración de credenciales (el detector de compromiso pausando una VM que intentó filtrar una credencial). Estas aparecen como alertas en tu ventana de réplica, y tu respuesta viaja de vuelta por el túnel. Si un prompt queda sin respuesta, caduca hacia la opción segura. Un prompt pendiente nunca bloquea el plano de control del remoto: el resto de la réplica sigue en vivo mientras la alerta está visible. Los prompts de consentimiento que puede desencadenar un agente en ejecución (uso de credenciales, paso a través de la cadena de suministro, escrituras de salvaguardas, inyección de prompts) se gestionan mediante una vía separada e imposible de falsificar desde el invitado, documentada en Gestión remota del consentimiento.
Los secretos permanecen en el anfitrión
Los secretos nunca cruzan el enlace. Cuando el cliente enriquecido lee los ajustes de una máquina remota o las Preferencias del remoto, cada campo secreto llega en blanco (las claves de API de los proveedores de modelos llegan como un sustituto oculto). Al guardar, un campo vacío u oculto significa «conservar el valor guardado» y uno escrito lo sustituye. Las claves de API, los tokens, los inicios de sesión por suscripción y los secretos de entorno de MCP permanecen en el Mac remoto. El cliente enriquecido se autentica solo con clave SSH una vez emparejado — no hay solicitudes de contraseña durante la réplica.
Acceso a servicios en las VM del remoto
El servidor de desarrollo de un espacio de trabajo remoto reside en una dirección privada como http://192.168.64.5:3000 en la red del remoto. Bromure te ofrece dos niveles de acceso a él — uno automático y con alcance de navegador, y otro opcional y de todo el sistema.
El panel del navegador (automático, con alcance PAC)
El panel de navegador plegable de la ventana de réplica (el botón del globo en la cabecera, o ⌃⌘B) es una VM de Chromium local cuyo tráfico de páginas hacia la subred del espacio de trabajo remoto se tuneliza por SSH. Un script PAC (proxy auto-config) generado enruta solo la subred remota a través de un reenviador SOCKS por anfitrión y todo lo demás en DIRECT, y los destinos se resuelven en el lado remoto — así que navegar a la dirección literal http://192.168.64.x:port de un servidor de desarrollo remoto simplemente funciona. El propio flujo MCP de control del navegador del agente remoto se retransmite a este panel, de modo que el agente de programación remoto maneja el navegador que estás mirando.
Selecciona una sesión o máquina en una máquina remota en ejecución y pulsa ⌃⌘B. El panel no hace nada hasta que la primera actualización de estado haya entregado la subred del remoto y el reenviador SOCKS esté activo (una línea de registro indica «tunnel not ready» hasta entonces). Su VM de navegador local está fijada a la subred 192.168.127.0/24 (puerta de enlace 192.168.127.1) para que nunca choque con una subred de espacio de trabajo. Los perfiles de navegador persistentes se guardan en este Mac, indexados por el ID de la máquina remota.
Nota: El panel del navegador requiere que este Mac sea Apple Silicon con la imagen base del navegador instalada localmente. El reenviador SOCKS se vincula a
0.0.0.0(para que la VM del navegador pueda alcanzarlo en la puerta de enlace vmnet) pero solo acepta conexiones desde loopback y la subred de navegador fijada192.168.127.x— nunca es un relé abierto.
Reenvío SOCKS y reenvíos de puerto fijos
Cada anfitrión remoto conectado obtiene automáticamente un reenviador SOCKS5 local en un puerto efímero vinculado a 0.0.0.0 (filtrado por par a loopback y la subred de navegador 192.168.127.x). Cada CONNECT abre un canal SSH forward <ip> <port> que el remoto puentea — a través del relé de loopback siempre activo del invitado en vsock 5010 — hacia el propio 127.0.0.1:<port> de ese invitado. Así que desde este Mac, curl --socks5 127.0.0.1:<port> http://192.168.64.5:3000 alcanza al invitado remoto byte por byte.
Para los reenvíos fijos hay fontanería de CLI oculta: bromure-cli __forward <hostID> <localPort> <remoteIP> <remotePort> para un reenvío al estilo ssh -L, y bromure-cli __forward-socks <hostID> <localPort> para un proxy SOCKS independiente. Ambos se vinculan a loopback de forma predeterminada y aceptan --bind-all.
Advertencia: El remoto rechaza cualquier reenvío cuyo destino no sea un invitado en su propia subred vmnet. No puedes usar un reenvío para alcanzar el propio Mac remoto, su puerta de enlace o internet — solo las VM del espacio de trabajo.
El túnel de red de todo el sistema
Cuando quieras que cualquier app local — no solo el panel del navegador — alcance las VM remotas en sus direcciones literales, activa el túnel por anfitrión con el interruptor de red de la ventana de réplica (el icono de puntos conectados, el primero de los controles de la cabecera). Su descripción emergente dice Activar el acceso directo de red a las VM del sistema remoto (192.168.x.x desde cualquier app local).
Un ayudante privilegiado de un solo uso — un demonio launchd instalado mediante SMAppService, sin sudo — crea una interfaz utun y enruta la subred remota hacia ella, luego devuelve el descriptor de archivo de la interfaz a la app. Una pila TCP/UDP de espacio de usuario en la app termina cada flujo y lo empalma sobre los mismos canales de reenvío SSH, usando tu identidad SSH. No hay reglas pf ni reenvío del kernel.
La primera vez que lo habilitas, una alerta titulada Permitir el ayudante de red de Bromure explica la aprobación única de macOS:
- Haz clic en el interruptor de la barra de herramientas.
- En la alerta, abre Configuración del Sistema → General → Elementos de inicio de sesión y permite Bromure Agentic Coding (macOS solicita credenciales de administrador una vez).
- La app sondea la aprobación (cada 2 segundos, hasta 5 minutos) y se conecta automáticamente en cuanto llega. Mientras espera, la información sobre herramientas del interruptor indica Esperando aprobación en Configuración del Sistema › Elementos de inicio de sesión….
Si el remoto aún no ha informado de la subred de sus máquinas (no ha arrancado ninguna máquina), la descripción dice Esperando a que el remoto informe de la subred de sus espacios de trabajo (inicia un espacio de trabajo) — haz clic para cancelar. Cuando el túnel está activo, la descripción dice El acceso directo de red a las VM del sistema remoto está ACTIVADO: haz clic para desactivarlo; si falla, Falló el túnel de red: haz clic para reintentar. Desactivarlo detiene el túnel, y cuando el último anfitrión lo desactiva, el daemon se da de baja. El ajuste se recuerda por anfitrión.
Nota: El túnel necesita una cuenta de administrador para la aprobación única. Sin ella, Bromure sigue funcionando a través de la ruta SOCKS integrada — el ayudante solo es necesario para alcanzar las VM remotas desde otras apps. Si macOS rechaza el registro de plano, una alerta titulada No se pudo instalar el ayudante de red lo explica, y el interruptor reintenta en el siguiente clic. Un
pinga un invitado remoto lo responde localmente el túnel: confirma que el enrutamiento está activo, no que el invitado esté vivo.
Varios remotos (subredes por instalación + enrutamiento de flota)
Puedes replicar varios remotos a la vez; cada uno abre su propia ventana, reenviador SOCKS y (opcionalmente) túnel. La trampa en la que esto solía caer: cada instalación usaba históricamente la misma red 192.168.64.0/24 para sus VM de espacio de trabajo, así que dos remotos replicados anunciaban subredes idénticas y la VPN de todo el sistema no podía distinguirlos.
Las subredes por instalación lo solucionan en el origen. Cada Mac elige ahora un /24 aleatorio dentro de 172.16.0.0/12 — saltándose el rango 172.17–172.20 de Docker y cualquier /24 en el que ya esté el anfitrión — y lo usa para todas sus VM de espacio de trabajo, así que dos instalaciones independientes casi nunca chocan (172.16/12 es además el rango privado con menos probabilidades de entrar en conflicto con una LAN o VPN corporativa). Las instalaciones nuevas empiezan en una subred así; puedes verla, cambiarla o volver a sortearla en cualquier momento en Preferencias › Recursos › Subred del espacio de trabajo. El direccionamiento de los invitados es DHCP puro desde el propio switch de Bromure, así que todo esto ocurre en el anfitrión (sin reconstruir la imagen), y el remoto anuncia la subred elegida en su estado para que el cliente enriquecido y el túnel la sigan automáticamente.
Para el caso raro en el que dos remotos aún comparten una subred, el primero se enruta literalmente y al segundo se le asigna un alias 100.64.<n>.0/24 del espacio CGNAT, con un remapeo 1:1 que preserva el octeto del anfitrión para que ambos puedan alcanzarse a la vez.
Advertencia: El enrutamiento de alias multi-anfitrión está implementado y probado con pruebas unitarias, pero el cableado en tiempo de ejecución que cose un PAC compatible con alias y un remapeo de browser-MCP entre anfitriones aún está pendiente. Un único anfitrión remoto es la configuración totalmente compatible hoy. Una limitación conocida del uso de alias, una vez cableado, es que una página de desarrollo que emita un enlace literal absoluto
http://192.168.64.xdentro de un remoto con alias puede enrutarse mal; los remotos literales (sin alias) no se ven afectados.
Exponer un servidor de desarrollo a internet
Aparte de todo lo anterior, un servicio HTTP individual que se ejecute dentro de un espacio de trabajo puede exponerse a internet pública con un túnel rápido de Cloudflare por puerto. Abre los detalles de una máquina en ejecución (el menú de la máquina › Detalles de la máquina), busca el servicio en la tarjeta de puertos y haz clic en el globo (descripción: Exponer a Internet (túnel rápido de Cloudflare)). Bromure ejecuta un proceso cloudflared para ese origen y te da una URL aleatoria https://<name>.trycloudflare.com — sin necesidad de cuenta de Cloudflare. Un túnel y una URL por servicio; exponer o dejar de exponer uno nunca afecta a los demás.
El color del globo sigue el estado: gris = apagado, naranja = instalando o iniciando, verde = en ejecución, rojo = fallido. Una línea de estado bajo el puerto muestra el progreso (Descargando y verificando cloudflared (~18 MB, una sola vez)…, luego Iniciando túnel…) o el nombre de anfitrión público en el que se puede hacer clic con un botón de copia.
La primera vez que expones algo, un diálogo de consentimiento único titulado ¿Exponer servicios a Internet mediante Cloudflare Tunnel? explica la descarga, la verificación, los procesos del túnel (registrados en la Cronología de seguridad), los Términos de servicio de Cloudflare y el hecho de que cualquiera con la URL aleatoria puede llegar al servicio. Vuelve a hacer clic en el globo para detenerlo.
El binario cloudflared es una versión fijada, verificada dos veces antes de ejecutarse: el SHA-256 del archivo descargado se compara con un hash integrado en la app, y una comprobación de firma de código Developer ID confirma el ID de equipo de Cloudflare. Se ejecuta con --no-autoupdate.
Advertencia: Las URL de túnel rápido son públicas para cualquiera que las tenga, y el nombre de anfitrión rota cada vez que el túnel se reinicia (un reinicio, un dejar de exponer/volver a exponer o un fallo). Solo los orígenes HTTP(S) obtienen un globo — SSH y los puertos conocidos de TCP en bruto o de base de datos (22, 1433, 3306, 3389, 5432, 5672, 5900, 6379, 9092, 11211, 27017) y UDP nunca lo obtienen, porque un navegador no podría alcanzarlos a través del borde de Cloudflare. Todos los túneles de un espacio de trabajo se desmontan cuando su VM se suspende o se apaga. Un desajuste de hash en la descarga rechaza la instalación hasta que la fijación se actualice en una versión de la app.
Reenvío de callbacks de OAuth
Una CLI que se ejecuta dentro de una VM de espacio de trabajo — gh, gcloud, un inicio de sesión de suscripción — a menudo completa un flujo de OAuth abriendo un navegador en tu Mac anfitrión y esperando una redirección a http://127.0.0.1:<port>/callback. Bromure puentea eso automáticamente: el anfitrión vincula el puerto de loopback tanto en IPv4 como en IPv6, y en la primera solicitud real lo empalma sobre vsock 5010 hacia el propio 127.0.0.1:<port> del invitado. El redirect_uri nunca se reescribe, así que PKCE y la validación de redirección siguen pasando. No hay nada que configurar — inicia el login dentro del espacio de trabajo y la redirección se entrega en el invitado.
El reenviador se desmonta a sí mismo tras 300 segundos para que el puerto de loopback nunca se retenga indefinidamente. Si el puerto del anfitrión ya está en uso, el flujo continúa de forma nativa sin el puente, y las preconexiones especulativas del navegador (sockets que se abren pero nunca envían) se ignoran para que no puedan atascar un servidor de callback de un solo disparo.
Modelo de seguridad
El acceso remoto es potente, así que vale la pena ser preciso sobre sus límites.
- Desactivado de forma predeterminada, una sola puerta. No existe ninguna ruta remota hasta que habilitas el servidor SSH. Cada ruta — menú humano, CLI, cliente enriquecido, reenvíos de puerto, browser MCP — transita por ese único servidor y ningún otro.
- Cifrado y transporte. Todo el tráfico es SSH. El flujo de estado y las llamadas de control del cliente enriquecido, las conexiones de terminal, las transferencias de archivos, los reenvíos de puertos y el relé browser-MCP viajan todos dentro de la conexión SSH. Como swift-nio-ssh no tiene intercambio de claves poscuántico, un cliente OpenSSH moderno mostrará una advertencia «not using a post-quantum key exchange»; es lo esperado y no indica un ataque de degradación.
- bromure.io es un intermediario, no un hombre en el medio. En la ruta de cuenta, bromure.io solo presenta tus dos dispositivos y — cuando no se puede construir ninguna ruta de par a par directa — retransmite bytes opacos a través de un relé TURN (sobre TLS). Nunca termina la sesión SSH: el túnel cifrado se ejecuta de extremo a extremo entre tus dos Mac. Las claves SSH se comparten únicamente entre los dispositivos de tu propia cuenta (nunca los de otro usuario), cada servidor obtiene por sí mismo las claves de dispositivo de su propietario, e inscribirse / cerrar sesión es como se concede y se retira la confianza de un dispositivo. Un dispositivo con la sesión cerrada o inactivo durante 90 días deja de estar autorizado.
- Quién puede iniciar sesión. Solo el usuario exacto de macOS que lanzó la app. La autenticación por contraseña se verifica contra OpenDirectory (sin Inicio de sesión remoto, sin cambios en PAM, sin derechos de administrador), y la autenticación por clave pública solo acepta claves que hayas inscrito. Los intentos de contraseña se limitan por IP de origen; las claves no.
- Qué puede hacer una sesión. Un inicio de sesión humano solo puede alcanzar el menú remoto — nunca una shell — así que puede crear, configurar y manejar espacios de trabajo, pero no puede ejecutar comandos arbitrarios del anfitrión. Los cuatro verbos de máquina del cliente enriquecido son igualmente limitados: un puente de socket de control, un reenvío a un invitado en la subred vmnet y un relé de browser-MCP. Los reenvíos al propio anfitrión, a la puerta de enlace o a internet se rechazan.
- Los secretos nunca salen del anfitrión. Las lecturas de ajustes remotos llegan con los secretos en blanco (claves de proveedores de modelos ocultas) y los guardados preservan los secretos; las claves de API, los tokens, los inicios de sesión por suscripción y los secretos de entorno de MCP permanecen en el Mac remoto.
- Confianza en el primer uso. El cliente enriquecido fija la clave de anfitrión del remoto por extremo en el primer contacto y advierte de forma ruidosa ante cualquier cambio posterior.
- Consentimiento infalsificable por el invitado. Los prompts de consentimiento MITM planteados por un agente en ejecución se renderizan en el lado del anfitrión de la bomba del terminal, donde un invitado comprometido no puede ni verlos ni falsificarlos; cualquier tiempo de espera o desacople se resuelve como denegación. Consulta Gestión del consentimiento remoto.
Solución de problemas
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
| Habilitar devuelve un error | La imagen base falta o todavía se está instalando | El servidor no puede iniciarse hasta que la imagen base esté presente. Termina la instalación, luego vuelve a habilitar. |
ssh conecta pero dice que reconectes con ssh -t | No se solicitó ningún TTY | El menú remoto necesita un terminal; añade -t (o usa ssh -t -p 2222 <user>@<mac>). |
| OpenSSH imprime "not using a post-quantum key exchange" | swift-nio-ssh no tiene intercambio de claves PQ | Esperado e inofensivo — la conexión sigue cifrada. |
| Una conexión por dirección sigue pidiendo una contraseña | La clave de este Mac no está inscrita en el remoto | Deja que un inicio de sesión con contraseña la inscriba automáticamente, o ejecuta bromure-cli remote key add '<this Mac's key>' en el remoto (Mostrar la clave de este Mac la copia). |
| Una conexión bromure.io sigue pidiendo una contraseña | El registro de claves aún no ha autorizado este dispositivo en ese servidor | Aquí lo sin contraseña es automático — comprueba que tienes sesión iniciada en bromure.io en ambos Mac, que el servidor tiene el Acceso remoto activo y que ambos ejecutan una compilación actual (el servidor publica su inicio de sesión y obtiene tus claves). Da unos segundos tras habilitar el Acceso remoto. |
| Mis servidores · bromure.io está vacío | Sin sesión iniciada, o el servidor no se anuncia | Inicia sesión (menú con el nombre de la app → Iniciar sesión en bromure.io…); en el remoto, habilita el Acceso remoto para que envíe latidos y aparezca. Una fila atenuada significa que dejó de enviar latidos. |
| «No se pudo establecer una conexión … mediante bromure.io» | No hay ninguna ruta de red directa ni retransmitida entre los dos Mac | Confirma que ambos pueden alcanzar bromure.io; el relé necesita que turns:5349 sea alcanzable. Vuelve a intentarlo — se reintenta una ruta en el siguiente intento. |
| «Se alcanzó … por bromure.io, pero su puerta de entrada SSH no respondió» | El Acceso remoto se desactivó en el remoto | Vuelve a habilitar el Acceso remoto en el Mac remoto. |
| «El dispositivo bromure.io de este Mac fue revocado. Inicia sesión de nuevo.» | Este dispositivo fue cerrado / revocado (por ti, la consola web o inactividad de 90 días) | Vuelve a inscribirte: menú con el nombre de la app → Iniciar sesión en bromure.io…. |
| Hoja roja Confiar en la nueva clave y continuar | La clave de anfitrión del remoto cambió desde que se fijó | Verifica fuera de banda; continúa solo si sabes por qué cambió la clave (reinstalación, nuevo Mac) — de lo contrario podría ser un intermediario. |
| Las conexiones en vivo se cortan tras editar claves | Añadir o eliminar una clave autorizada reinicia el proceso de escucha | Esperado; reconecta. |
| El panel del navegador sigue en blanco | El reenviador SOCKS o la subred aún no están listos | Espera a la primera actualización de estado de la réplica; asegúrate de que la máquina está en ejecución y de que este Mac tiene instalada la imagen del navegador. |
| Un reenvío se rechaza | El destino no es un invitado en la subred vmnet del remoto | Los reenvíos solo pueden alcanzar VM de espacio de trabajo, nunca el anfitrión, la puerta de enlace o internet. |
| El interruptor del túnel se queda atascado en Esperando aprobación… | El ayudante privilegiado aún no está aprobado | Aprueba Bromure Agentic Coding en Configuración del Sistema → General → Elementos de inicio de sesión (necesita administrador). Sin ello, SOCKS sigue funcionando. |
| Las ediciones del diseño de la cuadrícula no se aplican en el remoto | El remoto está sin pantalla | Las ediciones de la cuadrícula necesitan una ventana de GUI abierta en el remoto; todo lo demás se sigue replicando. |
Archivos, puertos y variables de entorno
El estado del lado del servidor reside en ~/Library/Application Support/BromureAC/remote/: hostkey_ed25519 (0600) y su .pub, authorized_keys (0600) y la anulación opcional overlay-key. La identidad y el estado del cliente enriquecido residen en ~/Library/Application Support/BromureAC/remote-client/: id_ed25519(.pub) (comentario bromure-ac-fatclient), known_hosts (fijaciones TOFU), hosts.json (servidores guardados) y la persistencia de réplica por anfitrión en hosts/<host-UUID>/. Todo el directorio de soporte se reubica bajo CFFIXED_USER_HOME.
| Puerto / interfaz | Función |
|---|---|
TCP 2222 (configurable, ≥ 1024) | El servidor SSH integrado, vinculación 0.0.0.0 de forma predeterminada. |
TCP 443 saliente + turns:5349 | Solo ruta de cuenta de bromure.io. Alcanzar tu cuenta (directorio de dispositivos, rendezvous) y, cuando no se puede construir ninguna ruta de par a par directa, el relé TURN sobre TLS. Ambos deben ser alcanzables desde cada dispositivo para la ruta de cuenta; sin relación con la ruta por dirección. |
| vsock 5010 del invitado | Relé de loopback siempre activo en cada VM — la ruta para los reenvíos de puerto y la entrega de callbacks de OAuth. |
| vsock 5830 del invitado | El flujo browser-MCP del agente del espacio de trabajo, retransmitido al panel del navegador del cliente enriquecido. |
Puerto efímero, vinculado a 0.0.0.0 | Reenviador SOCKS5 por anfitrión (filtrado por par a loopback y la subred de navegador 192.168.127.x). |
192.168.127.0/24 | La subred de VM de navegador local fijada del cliente enriquecido. |
100.64.<n>.0/24 | Subredes de alias CGNAT asignadas en una colisión de subred de flota. |
Las claves de UserDefaults pertinentes (dominio io.bromure.agentic-coding) son remoteAccess.enabled, remoteAccess.port, remoteAccess.bindAddress, remoteAccess.passwordAuth, remoteAccess.pubkeyAuth, fatclient.tunnel.<host-UUID> y cloudflareTunnel.consented. Entre las variables de entorno de diagnóstico están BROMURE_OVERLAY_KEY (atajo del menú remoto), BROMURE_FATCLIENT_LOG (registro detallado del cliente enriquecido) y BROMURE_FATCLIENT_UTUN (forzar la activación del túnel de todo el sistema — el interruptor de la barra de herramientas es la vía del producto). La referencia completa de la CLI, incluidas las piezas ocultas __forward, __forward-socks, __dial y __attach-window, está en CLI, API y MCP.