Solución de problemas

Este capítulo está organizado por síntoma. Cada entrada indica la causa probable y los pasos para solucionarla. Empieza por Primera parada: la Cronología, el registro y el estado — casi todos los diagnósticos de abajo se apoyan en una de esas fuentes — y luego salta a la sección que coincida con lo que ves.

Dos hechos subyacen a casi todo lo que sigue. Primero, una máquina (un espacio de trabajo, en el editor de ajustes) es un entorno aislado persistente: su disco del sistema (disk.img) y su carpeta personal de Linux (home.img) sobreviven entre arranques, así que un problema en uno de ellos no se arregla simplemente volviendo a abrir. Segundo, Bromure Agentic Coding aplica la política de seguridad en el anfitrión, antes de que el tráfico llegue a la VM — así que los bloqueos y errores que parecen venir «de dentro» del invitado suelen ser cosa del proxy del anfitrión, y se resuelven en la app, no en la VM.

Primera parada: la Cronología, el registro y el estado

Antes de cambiar nada, averigua qué está reportando la propia app.

La Cronología de seguridad

Abre Ventana › Seguridad… (o búscala con ⌘K). Registra cada decisión que los motores de seguridad de Bromure tomaron por tus agentes — intermediación y uso de credenciales, veredictos del cortafuegos y de OpenShell, rechazos de la sandbox del invitado, salvaguardas, comprobaciones de la cadena de suministro, análisis de inyección de prompts, sustituciones de datos personales, mensajes de delegación entre agentes y problemas de TLS en origen. El registro está siempre activo, sobrevive a los reinicios y los eventos de cada día se conservan 90 días.

La ventana Seguridad en su pestaña Resumen: mosaicos de las Últimas 24 horas para Bloqueada, Permitidos, Intermediación de credenciales, Cadena de suministro y Protección de datos personales, una tabla con las protecciones de cada máquina y una lista de Últimos bloqueos
  • La pestaña Resumen resume un periodo reciente (las últimas 24 horas por omisión) — Bloqueada, Permitidos, Intermediación de credenciales, Cadena de suministro, Protección de datos personales —, muestra las protecciones de cada máquina y enumera los Últimos bloqueos. Un bloqueo suele ser la respuesta más rápida a «¿por qué falló la petición del agente?»; haz clic en él para encontrar cada vez que ocurrió.
  • La pestaña Cronología enumera cada evento. Acótala con el campo Filtrar eventos… (un nombre de paquete, un host, una máquina), los filtros de espacio de trabajo, periodo y motor y, cuando replicas anfitriones remotos, el filtro de máquina (Todas las máquinas / Este Mac / un anfitrión).
  • En una máquina con el centinela del kernel, haz doble clic en una fila Red para ver qué prompt, qué llamada a herramienta y qué proceso hicieron la conexión (linaje de red).
  • Exportar… guarda los eventos — con el filtro aplicado — como archivo CSV. Adjúntalo a un informe de error o pásaselo a tu equipo de seguridad.
  • Borrar solo oculta los eventos en la ventana; los archivos diarios del disco se conservan.
La pestaña Cronología de la ventana Seguridad: un campo de filtro, filtros de espacio de trabajo, periodo y motor, los botones Exportar… y Borrar, y filas de los motores Protección de datos personales, Inyección de prompts, Cadena de suministro, Cortafuegos e Intermediación de credenciales

La ventana se describe en detalle en Resumen y cronología de seguridad.

El registro de la app

La app guarda una copia de todo lo que escribe en la salida de error estándar en ~/Library/Logs/BromureAC/bromure-ac.log, la hayas abierto desde un terminal o no. Cada ejecución empieza con una línea === … launch pid … que indica la compilación y la versión de macOS, y termina con una línea exit; un fallo deja una línea con el nombre de la señal fatal. Cuando el archivo supera los 8 MB, se rota en el siguiente arranque y se conserva un archivo anterior como bromure-ac.log.1.

Aquí es donde debes mirar cuando:

  • no se pudo restaurar el estado guardado de una máquina (la línea indica qué cambió desde la suspensión — consulta Una máquina suspendida no se reanuda donde se quedó);
  • se rechazó un arranque desatendido o se ejecutó una reparación del sistema de archivos;
  • la app se cerró de forma inesperada. Si macOS no muestra ningún informe de fallo, las últimas líneas del registro son el mejor testimonio de lo que pasó. El motor de terminal integrado también puede haber guardado detalles del fallo en ~/Library/Caches/com.mitchellh.ghostty/sentry.

Para ver el registro en vivo, o añadir salida de depuración, abre la app desde un terminal:

"/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac"

Para más detalle, define una variable de depuración antes del comando (consulta el Apéndice):

  • BROMURE_AC_DEBUG=1 — depuración con marca de tiempo para el motor de automatización, los clasificadores de inyección y la canalización de trazas.
  • BROMURE_CLI_DEBUG=1 — diagnósticos de conexión del socket de control para los comandos de la CLI.
  • BROMURE_REPAIR_DEBUG=1 — diagnósticos del proxy de reparación de inferencia local, añadidos a /tmp/bromure-repair.log.

La comprobación de estado

Mientras se ejecuta, la app sirve un socket de control solo para el propietario en ~/Library/Application Support/BromureAC/control.sock. Pídele su estado para confirmar que la app está viva y responde:

curl --unix-socket "$HOME/Library/Application Support/BromureAC/control.sock" http://localhost/health
{ "status": "ok", "service": "bromure-ac-automation", "debugEnabled": false }

Si has activado el servidor de automatización en loopback (Preferencias › Automatización, desactivado por defecto), el mismo endpoint responde por TCP en el puerto configurado — 9223 por defecto:

curl http://127.0.0.1:9223/health

Una conexión rechazada significa que la app (o su agente sin interfaz) no se está ejecutando; bromure-cli vm ls arranca el agente en segundo plano bajo demanda y es otra comprobación rápida. Consulta CLI, API y MCP para instalar bromure-cli.

La consola de instalación

Mientras se instala la imagen base — en el paso Instalación del asistente de configuración inicial, o tras Reconstruir la imagen base… — la vista de progreso tiene una sección plegada Salida de consola que transmite el registro en bruto del instalador, con un botón Copiar. Solo las últimas 100 líneas permanecen en pantalla, así que copia el registro antes de que se cierre la ventana si necesitas adjuntarlo a un informe.

Configuración e instalación de la imagen base

Ninguna máquina puede ejecutarse hasta que exista una imagen base de Linux. En el primer arranque, el asistente de configuración inicial se abre en Te damos la bienvenida a Bromure; al hacer clic en Comenzar se pasa al paso Instalación, que ejecuta la misma instalación que bromure-ac init. El flujo completo está en Instalación y primer arranque; esta sección cubre qué hacer cuando falla.

El paso de bienvenida del asistente: Te damos la bienvenida a Bromure, un botón Comenzar y la barra de pasos Bienvenida, Instalación, Credenciales, Elegir, Modelos, Listo

La descarga precompilada falla o se atasca

Causa. La vía preferida descarga una imagen firmada y comprimida con gzip desde https://dl.bromure.io, verifica su SHA-256 y la descomprime. Una interrupción de red, un fallo de la CDN o una suma de comprobación incorrecta la abortan. La descarga ya reintenta, volviendo a obtener el catálogo entre intentos (la publicación semanal puede sustituir la compilación anterior en plena descarga).

Solución. Vigila el estado y la Salida de consola. Ante un fallo en la descarga, la app muestra una alerta Falló la descarga de la imagen que ofrece Construir localmente o Cancelar:

  1. Si tienes conexión y el fallo fue pasajero, reintenta desde el menú de la app: Reconstruir la imagen base… → Descargar precompilada.
  2. Si la descarga no va a funcionar (red restrictiva, CDN bloqueada), elige Construir localmente para construir la imagen en tu Mac (unos 10 minutos). El resultado es la misma imagen.
  3. Desde la línea de comandos, bromure-ac init recurre automáticamente a la compilación local.

"Problema de red durante la compilación de la imagen base"

Causa. La compilación local arranca una VM instaladora desechable de Alpine que necesita una concesión DHCP y acceso saliente. En algunas VPN y redes bloqueadas no obtiene ninguna concesión, o sus descargas quedan en un agujero negro por una discrepancia de MTU.

Solución. La compilación se detiene con una alerta Problema de red durante la construcción de la imagen base que ofrece Reparar y reintentar (reinicia los daemons de red de macOS — pide tu contraseña de administrador) o Cancelar. Si sigue fallando con una VPN, limita la MTU de la tarjeta de red del invitado antes de reintentar:

defaults write io.bromure.agentic-coding vm.mtu -int 1280

La MTU ya tiene por defecto 1280; redúcela más solo si una ruta PMTU corporativa lo exige.

La instalación se queda sin espacio en disco

Causa. Toda instalación de imagen exige de entrada al menos 8 GB libres en el volumen que contiene el directorio de soporte, y un monitor aborta la compilación si se agota el espacio libre, para que no se quede atascada hasta un tiempo de espera sin explicación.

Solución. Libera espacio y reintenta. Consulta Espacio en disco para saber qué consume más.

La imagen base queda en un estado parcial

Causa. Cancelar a mitad de la instalación, o una compilación fallida, deja archivos temporales: base.img.partial, base.img.gz.partial, stock.img.partial y efivars.partial en el directorio de soporte. Su presencia significa que hay una instalación en curso o que se interrumpió. La imagen real solo se sustituye de forma atómica, así que una imagen existente que funcione sigue siendo utilizable todo el tiempo.

Solución. Vuelve a ejecutar la instalación hasta el final (Reconstruir la imagen base… o bromure-ac init). Para empezar de cero, bromure-ac reset elimina los archivos de la imagen base (base.img, efivars.bin, base.version, image-state.json y la descarga guardada stock.img / stock-state.json) tras una confirmación — no toca tus máquinas. Comprueba en cualquier momento qué hay instalado con bromure-ac info.

Hay disponible una imagen base más reciente

Pueden aparecer dos avisos distintos:

  • Actualización de la imagen base disponible (al arrancar) — la app incluye, o el catálogo publica, una imagen base más reciente que la del disco. Actualizar ahora la descarga (con una reconstrucción local como alternativa); Más tarde vuelve a preguntar en el siguiente arranque. La imagen actual sigue funcionando mientras tanto.
  • Hay disponible una imagen base más reciente. (al iniciar una máquina) — la base del disco es más reciente que aquella de la que se clonó el disco del sistema de esta máquina. Sí, actualizar restablece el disco del sistema de la máquina sobre la nueva base: se borra todo lo instalado en la VM con apt, mientras que la carpeta personal se conserva. No mantiene la base actual hasta que salga la siguiente; Recordármelo más tarde vuelve a preguntar en el primer arranque después de mañana. La respuesta se recuerda por máquina.

Actualizar la imagen base nunca cambia por sí solo el disco de una máquina existente; cada máquina se actualiza solo cuando respondes Sí, actualizar.

Una máquina no se inicia, no arranca o no se reanuda

Las máquinas aparecen en Máquinas virtuales en la barra lateral. El botón ⋯ de la fila de una máquina ofrece Iniciar (o Reanudar, o Apagar / Suspender / Reiniciar mientras se ejecuta). Con una sesión en el escenario, el menú de la máquina en la barra de herramientas — la cápsula con el nombre de la máquina — ofrece Detalles de la máquina: el panel con las tarjetas de CPU, Memoria, Disco y Tiempo activo, el resumen de la configuración y los botones de encendido. Las máquinas se tratan en Máquinas.

El arranque nunca termina («INMERSIÓN FALLIDA»)

Causa. Las máquinas no se precalientan — arrancan en frío desde su disco copy-on-write (o restauran una instantánea de suspensión), lo que tarda unos segundos. Si ningún terminal responde a los 30 segundos, la pantalla de arranque pasa a INMERSIÓN FALLIDA: «Puede que la VM esté bloqueada o que su disco del sistema esté dañado.»

Solución.

  1. Haz clic una vez en Seguir esperando — un primer arranque tras una actualización de la imagen, o un Mac lento, puede tardar más.
  2. Si sigue sin arrancar, reinicia la máquina desde su menú ⋯ (Reiniciar).
  3. Si la causa es un archivo dañado en el disco del sistema, consulta Recuperar una máquina que un archivo dañado impide arrancar, o haz clic en Restablecer disco del sistema… para volver a clonar el disco del sistema desde la imagen base. Tu carpeta personal — proyectos, dotfiles, claves .ssh, historial de la shell — se conserva; todo lo que instalaste con apt y los cambios en /etc se pierden.

El arranque de una máquina se detiene por un error de disco

Causa. El disco del sistema no superó la comprobación del sistema de archivos al arrancar — normalmente porque la VM se detuvo a mitad de una escritura (cierre forzado, fallo, corte de luz). El invitado no puede continuar por sí solo a partir de aquí.

Solución. El escenario de la máquina muestra ERROR DE DISCO — «El disco del sistema no superó la comprobación del sistema de archivos al arrancar y el arranque no puede continuar.» — con la línea de consola que lo provocó:

  1. Haz clic en Reparar disco. Bromure detiene la VM, reproduce el journal del disco en el Mac con su comprobador integrado y vuelve a arrancar. No se elimina nada.
  2. Si el arranque vuelve a fallar tras una reparación, haz clic en Restablecer disco del sistema… y confirma Restablecer a la base. La carpeta personal se conserva.

En un cliente enriquecido, la misma elección llega como aviso: «“‹machine›” can't boot — disk error», primero con Reparar disco / Ahora no y, una vez intentada una reparación, con Reset System Disk / Ahora no. También puedes ejecutar la reparación tú mismo con la máquina detenida: bromure-cli vm fsck <machine> --repair. Consulta Avanzado.

Una máquina suspendida no se reanuda donde se quedó

Causa. Reanudar restaura la RAM guardada (vm.state) sobre el hardware virtual exacto de la máquina. Cuando la configuración ha cambiado desde la suspensión — más o menos memoria, otras carpetas compartidas, una nueva compilación de la app o de la imagen base —, el estado guardado ya no se puede restaurar.

Qué ocurre. Bromure no deja la máquina atascada: cuando falla una restauración, descarta el estado guardado y arranca la máquina de cero, con el mismo disco y la misma carpeta personal. Todos tus archivos siguen ahí; solo se pierden los programas en ejecución y los terminales abiertos de la sesión suspendida. El registro de la app anota el motivo, nombrando lo que cambió — por ejemplo configuration changed since the suspend: memoryGB: 8 → 6 — booting fresh. Las automatizaciones y delegaciones que arrancan una máquina suspendida se comportan igual.

Algunos casos relacionados:

  • Carpetas compartidas cambiadas durante la suspensión. Al guardar los ajustes de la máquina se pregunta ¿Descartar la VM suspendida de “‹machine›”? — elige Descartar y guardar; el siguiente arranque es en frío. Los archivos de la carpeta personal y de las carpetas compartidas no se ven afectados.
  • Restablecer o borrar un disco siempre descarta el estado guardado: un disco nuevo con la RAM antigua se corrompería al instante.
  • Compilaciones de desarrollo. Un estado guardado por una compilación de la app a menudo no se puede restaurar con otra compilación local. Apaga las máquinas, en lugar de suspenderlas, antes de cambiar de compilación.

La máquina está marcada como «Comprometida»

Causa. El proxy vio que la credencial sustituta de una máquina se dirigía a un host para el que no se emitió — la firma de una exfiltración. La petición se bloquea, la VM se pausa y la alerta Este entorno puede haberse visto comprometido enumera las fugas con cuatro opciones:

BotónQué ocurre¿Se marca la máquina como comprometida?
Apagar (predeterminado)Se apaga la VM.Sí
BloquearSolo se rechaza esta petición; la VM se reanuda. Si vuelve a intentarlo, la alerta regresa.No
PermitirRespondes por el destino: durante el resto de esta sesión, la credencial se sustituye y se envía allí, y las peticiones posteriores a ese destino ya no se marcan.No
Guardar para investigaciónEliges una carpeta; Bromure copia allí la imagen de disco y archivos comprimidos de la carpeta personal y de las carpetas compartidas, y luego apaga la VM.Sí

En un cliente enriquecido o en un Mac sin interfaz, el aviso ofrece Apagar / Bloquear / Permitir, y recurre a Apagar cuando nadie responde. Si activaste No alertar sobre la exfiltración de credenciales en el panel Salvaguardas de la máquina, no aparece ninguna alerta: la fuga se sigue bloqueando y registrando en la Cronología.

Solución. Una máquina marcada como comprometida muestra «Comprometido — al iniciar se le pedirá borrar el disco y el directorio personal» y se niega a arrancar hasta que confirmes el borrado en ⛔ «‹machine›» está marcado como comprometido. Borrar e iniciar elimina el disco, la carpeta personal y el estado guardado, y luego arranca una VM nueva — tus credenciales, claves SSH y ajustes de la máquina se conservan. Las carpetas de proyecto compartidas viven fuera del almacenamiento de Bromure y no se borran, así que revísalas a mano en busca de archivos contaminados. Una automatización o delegación no puede confirmar el borrado: su arranque se rechaza con «The workspace is marked compromised — start it yourself to confirm the wipe.». El modelo de detección se describe en Credenciales y el límite de red.

«The workspace did not boot in time» / «did not start in time»

Causa. Una sesión, automatización o tarea de código esperó a que su máquina arrancara y se rindió. Motivos habituales:

  • La máquina realmente no llegó a arrancar — busca INMERSIÓN FALLIDA o ERROR DE DISCO en su escenario (arriba).
  • Se rechazó un arranque desatendido porque necesitaba una respuesta tuya. El historial de ejecuciones de las automatizaciones muestra el motivo en lugar del tiempo agotado: «The workspace is marked compromised — start it yourself to confirm the wipe.» o «“‹model›” is still downloading — the workspace can't start until it has.».
  • El Mac estaba en reposo o sobrecargado.

Solución. Inicia tú mismo la máquina desde su menú ⋯ y vigila su escenario, responde a cualquier aviso que aparezca y luego vuelve a intentar la sesión o la ejecución. Los avisos de arranque (actualizaciones de imagen, nuevos paquetes recomendados) aparecen como hojas en la ventana principal y nunca bloquean el arranque de las máquinas.

Si una nueva sesión dice en cambio «El agente nunca apareció…», puede que la máquina ejecute un agente interno de la VM más antiguo: Reiníciala desde su menú ⋯ y vuelve a intentarlo.

No hay suficiente espacio libre en disco

Causa. Crear cualquier clon copy-on-write o imagen de home se niega a continuar con menos de 1 GB libre en el volumen, fallando rápido con un error de disco lleno en lugar de atascarse a mitad de sesión.

Solución. Libera espacio (consulta Espacio en disco) y vuelve a iniciar la máquina.

Recuperar una máquina que un archivo dañado impide arrancar

Causa. Una mala configuración escrita en el invitado — un /etc/fstab roto, un dotfile corrupto — puede impedir que la VM arranque antes de que puedas iniciar sesión para arreglarlo. Como macOS no puede montar ext4, no puedes simplemente abrir el disco en Finder.

Solución. Usa el explorador ext4 integrado, con la máquina detenida:

  1. Espacios de trabajo › Abrir archivo ext4… y elige el disk.img o el home.img de la máquina en ~/Library/Application Support/BromureAC/profiles/<uuid>/.
  2. Navega hasta el archivo problemático. Haz clic derecho para Previsualizarlo o Extraerlo… a tu Mac.
  3. Para corregirlo en el sitio, haz clic en Activar edición… (nunca edites una imagen que tenga abierta una VM en ejecución) y luego clic derecho → Reemplazar… con una copia corregida desde tu Mac.
  4. Si el explorador indica que el journal necesita recuperación, haz clic primero en Ejecutar fsck…. El comprobador está integrado; no hay que instalar nada.

Si el daño está en la carpeta personal — un agente borró o rompió algo —, Rebobinar el home… en el menú ⋯ de la máquina devuelve la carpeta personal al estado que tenía en un arranque anterior. Consulta Avanzado.

Advertencia: El reemplazo en el sitio solo funciona cuando el nuevo contenido cabe en los bloques ya asignados del archivo — hacer crecer un archivo se rechaza ("Ese archivo necesitaría crecer"). Úsalo para corregir configuraciones y extraer archivos, no para añadir datos.

"Restablecer disco" / "Borrar home…" están atenuados

Causa. Estas acciones destructivas se rechazan mientras la máquina está en ejecución.

Solución. Apaga primero la máquina (la descripción emergente dice «Close the session window first.») y vuelve a intentarlo.

Nodos y registros de Kubernetes

Los clústeres y los registros se ejecutan en sus propias máquinas, que aparecen en Máquinas virtuales › Kubernetes y Registros de contenedores. Consulta Clústeres de Kubernetes y registros.

Un nodo o registro no vuelve tras salir o Detener

Qué hace Bromure. Salir de la app suspende los nodos de los clústeres y los registros, y el siguiente arranque los reanuda; una instantánea que no se restaura recurre a un arranque de cero, como en cualquier máquina. Un Detener explícito los apaga limpiamente, con hasta 60 segundos de margen.

Si aun así el arranque de un nodo se detiene en una comprobación del sistema de archivos, Bromure lo detecta en la consola, detiene la VM, ejecuta su comprobador integrado sobre los discos de sistema y de datos del nodo y — cuando eso no basta — ejecuta el e2fsck de Linux sobre ellos desde una máquina desechable. Reintenta el arranque una vez; si también falla, el clúster muestra un error claro.

Solución. Mira la pestaña Registro del clúster para ver qué ocurrió. Si la reparación automática se rindió, reinicia el clúster desde su menú Acciones del clúster; como último recurso, elimínalo y vuelve a crearlo.

Un espacio de trabajo no ve un clúster o registro

Causa. El acceso es por máquina. Una máquina que no esté en la lista de acceso de un clúster o registro no recibe ningún contexto ~/.kube/config ni $BROMURE_REGISTRY.

Solución. Abre la pestaña Acceso del clúster o registro (en un clúster, también Acciones del clúster › Acceso de espacios de trabajo…) y añade la máquina. El contexto de un clúster se envía al ~/.kube/config de las máquinas en ejecución en cuanto cambias su acceso.

Problemas de inicio de sesión y de modelos

El diseño mantiene las credenciales reales fuera de la VM: el invitado funciona con tokens sustitutos («falsos») y el proxy del anfitrión los cambia por los secretos reales en tránsito. La mayoría de los síntomas de «autenticación» se remontan a ese límite. Consulta Credenciales y el límite de red y Modelos y proveedores.

El agente — o tú — ve una clave de API falsa

Causa. Esto es lo esperado. Las variables de entorno como ANTHROPIC_API_KEY, OPENAI_API_KEY, XAI_API_KEY, GH_TOKEN y las variables de AWS dentro de la VM son señuelos deliberados. El proxy sustituye el valor real del lado del anfitrión para los destinos permitidos, así que una falsa filtrada no vale nada.

Solución. Nada — no intentes «corregir» la clave dentro de la VM. Si las peticiones reales fallan con un error de autenticación en el proveedor, el problema es el secreto real en el anfitrión: vuelve a introducir la clave de API del proveedor en Preferencias › Modelos (o en el panel Modelos propio de la máquina si tiene ajustes de modelos personalizados). Un token falso que aparezca en una petición al host equivocado activa la detección de compromiso en lugar de autenticar.

Una suscripción dejó de funcionar («Inicio de sesión caducado»)

Causa. Los inicios de sesión por suscripción (Claude, ChatGPT, Grok, Kimi) se guardan cifrados en el anfitrión, que también los renueva. Si el proveedor revoca el token de renovación, o si la sesión de la cuenta termina, el anfitrión ya no puede emitir un token válido y todas las sesiones que usan ese inicio de sesión fallan.

Solución.

  1. Abre Preferencias… › Modelos (⌘,). El proveedor muestra Inicio de sesión caducado y «‹proveedor› rechazó el inicio de sesión guardado (de ‹fecha›). Las sesiones no pueden usarlo hasta que vuelvas a iniciar sesión.»
  2. Haz clic en Volver a iniciar sesión y termina el inicio de sesión en tu navegador. La clave sustituta dentro de las máquinas nunca cambia, así que los agentes en ejecución recogen el nuevo inicio de sesión.
  3. Si una máquina sigue fallando mientras las demás funcionan, probablemente tiene su propio inicio de sesión. Un inicio de sesión lanzado desde una máquina pregunta ¿Compartir con todos los espacios de trabajo? — elegir Solo este espacio de trabajo da a esa máquina un inicio de sesión privado que tapa el compartido. Revisa el panel Modelos de la máquina: vuelve a iniciar sesión ahí, o haz clic en Usar el proveedor global para que la máquina herede el inicio de sesión compartido.

En un chat, un agente que no puede autenticarse muestra una tarjeta: Iniciar sesión en ‹agente›, con Abrir la página de inicio de sesión y un campo Pegar código. La fila de la barra lateral indica «Hace falta iniciar sesión». Iniciar sesión desde la tarjeta captura la credencial en el anfitrión, igual que el panel Modelos.

Un agente necesita un proveedor de modelos

Causa. El agente que elegiste no tiene nada sobre lo que ejecutarse en esta máquina — ninguna clave de API, ningún inicio de sesión, ningún servidor personalizado ni modelo en el dispositivo. El chat muestra «‹agente› necesita un proveedor de modelos» y «‹agente› aún no tiene proveedor de modelos en esta máquina. Añade una clave de API o un modelo local en los ajustes de la máquina y vuelve a iniciar la sesión.»

Solución. Haz clic en Ajustes de la máquina… en la tarjeta, o configura un proveedor en Preferencias › Modelos, y vuelve a iniciar la sesión. En la pantalla de nueva sesión, un agente en este estado aparece marcado con «Iniciar sesión al arrancar» o «Elegir un proveedor de modelos al arrancar».

Un agente está atascado en una pantalla de primer uso, de confianza o de inicio de sesión

Causa. Los agentes de programación tienen sus propias pantallas de primer uso — selectores de tema, preguntas de confianza en la carpeta, menús de inicio de sesión — que el chat no puede mostrar tal cual. Bromure responde a las pantallas de configuración inicial antes de que arranque el agente y convierte el resto en tarjetas en el chat:

  • una tarjeta de inicio de sesión para un menú de inicio de sesión (el «Not logged in» de Claude, el selector de ChatGPT de Codex, el código de dispositivo de Grok, el inicio de sesión de Kimi);
  • Confiar en esta carpeta y continuar cuando el agente espera a que confíes en la carpeta;
  • tarjetas rojas cuando el agente no pudo autenticarse, alcanzó un límite de uso o se detuvo con un error;
  • para Oh My Pi, que no tiene inicio de sesión propio, una tarjeta de proveedor que remite a los ajustes de la máquina.

Solución. Responde a la tarjeta. Si el chat sigue pareciendo atascado — «Pensando…» sin que pase nada —, pulsa Linux en la barra de herramientas (⌥⌘U) para ver el terminal real del agente, resuelve lo que haya en pantalla y pulsa Sesión para volver. «Cambia al terminal para resolverlo y vuelve a enviar.» en una tarjeta significa lo mismo.

Para Kimi Code, Bromure inicia sesión en el servicio internacional de Kimi (kimi.ai). Un inicio de sesión de Kimi hecho antes de ese cambio puede dejar de funcionar y mostrar una tarjeta de inicio de sesión; vuelve a iniciar sesión.

"¿Intercambiar el token de suscripción?" sigue apareciendo, o se rechazó por error

Causa. Cuando un agente inicia sesión con un token real dentro de la VM, el proxy lo detecta y ofrece moverlo al anfitrión para que el secreto real salga del invitado. La elección se recuerda por máquina y por proveedor.

Solución. En el panel Trazado de la máquina, las filas Intercambio de token de suscripción de Claude e Intercambio de token de suscripción de Codex muestran el estado actual con un control para restablecerlo — Olvidar intercambio (volver a preguntar la próxima sesión) o Reactivar el aviso.

Red dentro de la VM

IPv6 no funciona en el invitado

Causa. Es intencionado. La ruta de red del anfitrión de Bromure es solo IPv4, y una LAN que anuncia IPv6 sin una salida IPv6 que funcione hace que cada consulta AAAA se quede colgada. Las imágenes base recientes desactivan IPv6 dentro del invitado, y apt se fuerza a IPv4 en cada arranque.

Solución. Usa direcciones IPv4 y nombres de host. localhost en el invitado resuelve solo a 127.0.0.1.

La subred de las máquinas choca con una red que usas

Causa. Las instalaciones nuevas colocan sus máquinas en un /24 privado aleatorio dentro de 172.16.0.0/12 (saltándose los habituales 172.17–172.20 de Docker y cualquier rango en el que ya esté el Mac). Las instalaciones más antiguas pueden seguir usando 192.168.64.0/24. Cualquiera de los dos puede chocar con una VPN o con la red de una oficina.

Solución. Abre Preferencias… › Recursos. En Subred del espacio de trabajo, Usar una subred privada (evita conflictos entre remotos) cambia a una subred 172.16/12 aleatoria, y Aleatorio elige una nueva. Los cambios se aplican la próxima vez que arranquen tus máquinas.

El tráfico de una máquina falla con una VPN

Causa. Los túneles VPN reducen el tamaño útil de los paquetes; una MTU demasiado grande hace que las descargas se pierdan en un agujero negro.

Solución. La tarjeta de red del invitado ya está limitada a 1280 bytes. Si una ruta corporativa necesita menos, baja vm.mtu como se muestra en Problema de red durante la construcción de la imagen base.

Errores de TLS y certificados dentro de la VM

"self-signed certificate" o "unable to get local issuer certificate"

Causa. Todo el HTTPS del invitado es interceptado por el proxy MITM del anfitrión, que vuelve a firmar el tráfico con una CA raíz por instalación. Las herramientas dentro de la VM confían en ella a través de las variables de entorno del paquete de CA que Bromure establece para node, python, go, rust, curl, deno y el AWS SDK, además del archivo de CA colocado en el recurso compartido meta (bromure-ca.pem). Una herramienta que ignore esas variables — o un contenedor que traiga su propio almacén de confianza — rechazará el certificado del proxy.

Solución.

  1. Para la mayoría de las herramientas no hace falta hacer nada. Si falla una herramienta concreta, apúntala al paquete de CA exportado en lugar de desactivar la verificación; el archivo de CA está disponible dentro del invitado y las variables habituales del tipo *_CA_BUNDLE / SSL_CERT_FILE ya están exportadas.
  2. Para un contenedor Docker que necesite acceder a la red, usa el interruptor Heredar la configuración del proxy HTTP de la hoja Ejecutar un nuevo contenedor para que http_proxy/https_proxy (el proxy dentro del invitado en 127.0.0.1:65534) se propaguen, y monta o instala la CA donde la buscan las herramientas del contenedor.
  3. Si los errores de certificado aparecen solo después de eliminar o renovar la CA (abajo), reinicia las máquinas afectadas para que la nueva CA se vuelva a instalar.

Para un host que fija su certificado, el panel Salvaguardas de la máquina puede omitir la interceptación para una sola petición (X-bromure-insecure) — consulta Ajustes de salvaguardas.

Rotar la CA raíz

Causa / cuándo hacerlo. La clave privada de la CA raíz vive en ~/Library/Application Support/BromureAC/ca/key.pem (modo 0600) con su certificado en cert.pem. Quizás quieras rotarla si sospechas que la clave quedó expuesta.

Solución. Sal de la app, elimina el directorio ca/ y vuelve a abrirla — se genera una CA nueva y se vuelve a instalar en las máquinas en su siguiente arranque. Los cuerpos de traza ya capturados no se ven afectados, pero cualquier invitado que hubiera fijado el certificado antiguo tendrá que volver a confiar en el nuevo.

Bloqueos de la cadena de suministro

Cuando el npm install, el pip install o algo similar de un agente falla con un error característico, lo más probable es que haya intervenido la canalización de la cadena de suministro del anfitrión. La política y sus capas se documentan en Protección de la cadena de suministro y en la referencia Ajustes de la cadena de suministro.

Una instalación falló con HTTP 451

Causa. Un 451 ("No disponible por razones legales") es el bloqueo de la cadena de suministro de Bromure — elegido para que sea distinguible de un vistazo del 403 que usan las Salvaguardas. El gestor de paquetes imprime el motivo textualmente en su salida de error, por ejemplo:

Bromure Supply-Chain Security blocked this request: npm package [email protected]
published 4 hours ago — policy requires 2 days minimum

Solución. Lee el motivo. Los desencadenantes comunes y sus remedios:

Motivo en el mensajeCapaCómo proceder
«published … ago — policy requires N days»Barrera de antigüedadFija una versión más antigua, o añade el paquete a Paquetes exentos en el panel Cadena de suministro de la máquina.
Un CVE / aviso en o por encima de tu umbralOSV o socket.devElige una versión parcheada, o eleva el umbral Bloquear en gravedad.
Marcado como comprometido / malware / typosquatsocket.devTrátalo como una señal real — verifica el nombre del paquete antes de anular.

Encontrar el motivo en la Cronología

Abre la Cronología de seguridad, elige el motor Cadena de suministro y vuelve a ejecutar la instalación. Cada paquete comprobado aparece como una fila: en verde si pasó, en rojo si se bloqueó o se eliminó. Una Cronología silenciosa durante una instalación suele significar que todo vino de la caché — el mosaico Paquetes comprobados de la pestaña Resumen muestra que las comprobaciones se están haciendo.

Anular un bloqueo

Solución. Las capas de la cadena de suministro son interruptores por máquina que se aplican en vivo (sin reiniciar la VM). Para dejar pasar un paquete concreto, añade una exención o una entrada de lista de permitidos en el panel Cadena de suministro, o baja o desactiva la capa correspondiente para esa máquina.

Cada instalación pide consentimiento (sin conexión, o socket.dev + Cargo)

Causa. Cuando OSV o socket.dev están habilitados pero no pueden producir un veredicto — la red está caída, o el ecosistema no es compatible — Bromure falla cerrado, reteniendo cada paquete para tu consentimiento en lugar de permitirlo silenciosamente. Dos situaciones producen un aviso por paquete:

  • Trabajar sin conexión con OSV o socket.dev habilitados: cada paquete no cacheado se retiene.
  • socket.dev con Cargo: socket.dev no tiene soporte para Cargo, así que cada artefacto de crates.io no produce ningún veredicto.

Solución. Para periodos sin conexión, deshabilita OSV y socket.dev — el filtro de antigüedad sigue funcionando con los metadatos ya cacheados sin conectividad. Para trabajo intenso con Rust, apaga socket.dev o responde a los avisos (las concesiones se indexan por package@version). El respaldo de tiempo de publicación de PyPI es la única comprobación que falla abierta ante un error de red puro.

Falsos positivos de inyección de prompts

El detector de inyección de prompts analiza el contenido que se devuelve al agente y puede registrar, preguntar o bloquear. Su comportamiento y ajuste se describen en Detección de inyección de prompts y salvaguardas y en la referencia Ajustes de inyección de prompts.

Una solicitud legítima fue marcada o bloqueada

Causa. El clasificador dio a un fragmento entrante una puntuación por encima del umbral de la máquina — documentación de seguridad, una página que cita un ataque o un fragmento que parece una instrucción para el agente pueden tener aspecto de inyección.

Solución.

  1. Revisa las filas Inyección de prompts de la Cronología para juzgar si fue un intento real.
  2. Si fue un falso positivo y los bloqueos estorban, cambia el modo de inyección de prompts de la máquina de Bloquear a Preguntar (tú decides en cada detección) o Registrar (solo registrar, nunca bloquear) en el panel Inyección de prompts.
  3. Los ajustes son por máquina, así que una máquina de investigación ruidosa puede funcionar en modo Registrar mientras una de producción se queda en Bloquear.

Los mensajes entre agentes también se analizan: un mensaje de delegación marcado muestra «retenido: inyección de prompt» y se registra en Delegación entre agentes.

Todas las automatizaciones desencadenadas por eventos están bloqueadas

Causa. Las automatizaciones desencadenadas por eventos requieren el modelo PromptGuard. Sin él, cada ejecución de evento se bloquea con "PromptGuard model not installed — event triggers require it (download in Settings)". Esto es por diseño, no un error.

Solución. Instala el modelo PromptGuard desde el panel Inyección de prompts. Si un interruptor de detección está activado pero el modelo no se descargó — por ejemplo, porque el disco estaba lleno —, la máquina funciona sin protección y el fallo se registra; vuelve a descargarlo cuando haya espacio.

Espacio en disco: adónde va y cómo recuperarlo

Qué consume espacio

El almacenamiento está en ~/Library/Application Support/BromureAC/ (consulta el Apéndice para el mapa completo). Los grandes consumidores:

QuéDóndeTamaño típico
La imagen base de Ubuntubase.img24 GB lógicos, unos pocos GB físicos
Discos del sistema por máquinaprofiles/<uuid>/disk.imgClon copy-on-write de la base; solo crece a medida que escribe el invitado
Carpetas personales por máquinaprofiles/<uuid>/home.imgext4 disperso, 16 GB aparentes por defecto, asignados bajo demanda
Instantáneas de RAM de VM suspendidasprofiles/<uuid>/vm.stateHasta la RAM asignada a la máquina, por máquina suspendida
Puntos de control del disco y de la carpeta personalprofiles/<uuid>/checkpoints/Espacio real solo a medida que divergen de los discos activos
Nodos de Kubernetes, registros, conector de mensajeríakube/<id>/nodes/<uuid>/Un disco de sistema cada uno, más un disco de datos por nodo con Longhorn (40 GB aparentes por defecto) o el Almacenamiento de imágenes del registro
Modelos en el dispositivomodels/<org>--<name>/Varios GB por modelo
Modelos de detecciónModels/prompt-injection/, Models/claudemd-guard/Cientos de MB cada uno
Cuerpos de trazatraces/Limitado: 100 MB por sesión, 5 GB en total
Copias de las conversacionestranscripts/, task-transcripts/, runs/Crece con tus sesiones, tareas y ejecuciones de automatizaciones
Registros de sesiones, salas y delegacionessessions.json, rooms.json, delegations.jsonPequeños
Cronología de seguridadsecurity-timeline/<date>.jsonlPequeña; se conserva 90 días por omisión (Preferencias › Rastreo › Security history)
Registro de la app~/Library/Logs/BromureAC/Como mucho unos 16 MB (8 MB más un archivo rotado)

Nota: La tarjeta de Disco del panel de control prefiere los propios números de df del invitado sobre la asignación del clon del anfitrión, porque un clon copy-on-write sobreestima el uso — los bloques liberados dentro del invitado permanecen materializados en el clon.

Recuperar espacio

  • Apaga las máquinas suspendidas que no estés usando. Un apagado completo borra vm.state; la máquina arrancará en frío la próxima vez.
  • Elimina los modelos en el dispositivo que ya no uses, desde Preferencias › Modelos o con bromure-cli model rm <id>.
  • Restablece un disco del sistema inflado con Restablecer el disco en el menú ⋯ de la máquina (vuelve a clonar desde la base, conserva la carpeta personal).
  • Borra las trazas con bromure-cli trace clear — limpia tanto el anillo en memoria como los cuerpos en disco.
  • Elimina las sesiones que ya no necesites (Eliminar sesión en el menú de la fila), y elimina las conversaciones cuya máquina o carpeta ha desaparecido con la línea de limpieza de la barra lateral.
  • Elimina una máquina entera que ya no necesites (⋯ › Eliminar espacio de trabajo, o bromure-cli workspaces rm <workspace>), lo que elimina su disco y su carpeta personal.
  • Elimina los clústeres y registros que no uses desde sus paneles.
  • Recupera la imagen base con bromure-ac reset si quieres empezar de cero (las máquinas no se tocan; vuelve a ejecutar init después).

Acceso remoto y el cliente enriquecido

La puerta de entrada SSH opcional del acceso remoto y la réplica del cliente enriquecido se tratan en Acceso remoto y clientes. Los síntomas de abajo son los que impiden una conexión.

No se puede conectar por SSH (puerto 2222)

Causa. La puerta de entrada remota está desactivada por defecto. Además es un servidor integrado (no el sshd del sistema), así que activar la Sesión remota de macOS no le afecta, y se pausa durante cualquier instalación de la imagen base.

Solución.

  1. Comprueba el estado con bromure-cli remote status — indica si el servidor está activado y en ejecución, la dirección y el puerto de escucha, los métodos de autenticación, la huella de la clave del anfitrión, una cadena de conexión ssh -p <port> <user>@<host> lista para usar y la lista de claves autorizadas.
  2. Habilítalo con bromure-cli remote enable (valores por defecto: puerto 2222, enlace 0.0.0.0, ambos métodos de autenticación activados). Da error si ambos métodos de autenticación están deshabilitados, si el puerto es inferior a 1024, o mientras la imagen base falta o se está instalando.
  3. Añade tu clave pública con bromure-cli remote key add <path-or-key>. Añadir o eliminar una clave reinicia el escucha y corta las conexiones en vivo — comportamiento esperado.

Discrepancia de clave de anfitrión o de huella (TOFU)

Causa. El cliente enriquecido fija la clave de anfitrión de cada remoto en la primera conexión (confianza en el primer uso), guardada en ~/Library/Application Support/BromureAC/remote-client/known_hosts. La fijación es por punto de conexión (address:port), así que editar la dirección o el puerto de un anfitrión guardado vuelve a mostrar, con razón, el aviso de confianza. Una discrepancia en un punto de conexión sin cambios significa que la clave del remoto ha cambiado — o que algo está interceptando la conexión.

Solución. Si reconstruiste el remoto legítimamente, elimina su fijación y reconecta para volver a confiar. Si no esperabas que la clave cambiara, detente e investiga antes de aceptarla.

Las Preferencias remotas no se cargan

Causa. Cuando hay una ventana de réplica abierta, Preferencias… puede editar los ajustes de un anfitrión remoto (el selector Ajustes para:). Muestra «Cargando las preferencias de ‹anfitrión›…» mientras los obtiene, y «No se pudieron cargar las preferencias remotas» cuando la conexión se cae o el remoto es de una versión anterior.

Solución. Comprueba que la ventana de réplica está conectada y haz clic en Reintentar. Mientras tanto, elige Este Mac en Ajustes para: para editar tus propios ajustes.

El túnel de todo el sistema necesita aprobación

Causa. El túnel opcional de todo el sistema del cliente enriquecido usa un demonio launchd con privilegios registrado a través de SMAppService. Su primer registro hace aparecer un conmutador de aprobación de elemento en segundo plano.

Solución. Aprueba Bromure Agentic Coding en Ajustes del Sistema › General › Ítems de inicio y extensiones (la app puede abrir ese panel por ti). A través del túnel, un ping ICMP a un invitado remoto se responde localmente y confirma el enrutamiento, no que el invitado esté vivo.

Informar de un error

Cuando presentes un informe en bromure.io, incluye lo suficiente para que un mantenedor pueda reproducirlo:

  1. Versiones de la app y de la imagen — la versión de la app (en About Bromure Agentic Coding) y la salida de bromure-ac info (la marca de versión de la imagen base, los tamaños y la ruta).
  2. El registro de la app — ~/Library/Logs/BromureAC/bromure-ac.log (y bromure-ac.log.1 si el problema empezó antes del último arranque). Vuelve a abrir la app con BROMURE_AC_DEBUG=1 desde un terminal si quien mantiene el proyecto pide más detalle.
  3. El registro pertinente — para fallos de instalación, la Salida de consola copiada; para comportamientos relacionados con la seguridad, un CSV filtrado obtenido con Exportar… desde la Cronología de seguridad.
  4. Lo que esperabas frente a lo que ocurrió, y si la máquina estaba apagada, suspendida o en ejecución.

No incluyas secretos reales — los registros de trazas y las líneas del registro ya los reducen a vistas previas breves, y la app está hecha para que las credenciales reales nunca entren en una VM. Si tu Mac está inscrito en un espacio de trabajo de bromure.io, envía los informes a través del administrador de tu organización. La inscripción se trata en Empresa.