CLI, automatización y MCP
Todo lo que puedes hacer en la app también puedes hacerlo sin la ventana. El mismo binario que aloja la interfaz gráfica —bromure-cli, dentro de Bromure Agentic Coding.app/Contents/MacOS/— es una CLI completa de múltiples comandos, un plano de control HTTP, dos servidores MCP, un diccionario de AppleScript y un planificador. Este capítulo es la referencia de todos ellos.
Cuatro superficies de automatización se apoyan sobre un único plano de control:
- La línea de comandos
bromure-cli— una CLI al estilo de Docker/kubectl para crear espacios de trabajo, arrancar VM, conectar terminales, ejecutar comandos y leer trazas. - La API de automatización — el mismo plano de control expuesto como JSON sobre HTTP en la interfaz de loopback, para hacer scripting desde cualquier lenguaje.
- Servidores MCP — un servidor stdio que permite a un agente de IA (Claude Code, Claude Desktop) administrar la app, y un servidor
browserque permite a un agente controlar el Chromium integrado de su espacio de trabajo. - AppleScript — el diccionario Bromure AC Suite, para scripting de macOS y herramientas de captura de pantalla.
Las automatizaciones programadas —ejecuciones de agente recurrentes y desatendidas— se construyen sobre el mismo plano de control y se tratan al final del capítulo.
El plano de control: socket y API
Cada una de estas superficies acaba hablando HTTP con la app en ejecución a través de uno de dos transportes:
| Transporte | Dónde | Control de acceso | Activo por defecto |
|---|---|---|---|
| Socket de control | ~/Library/Application Support/BromureAC/control.sock (dominio Unix, HTTP/1.1) | Permisos de archivo — el socket tiene modo 0600, solo para el propietario. Alcanzar el archivo es la autorización, al estilo del socket de Docker. | Sí, siempre que la app o un agente sin ventana estén en ejecución |
| API de automatización | 127.0.0.1:9223 (TCP) | Solo loopback por defecto; las rutas de introspección y mutación requieren además la variable de entorno BROMURE_DEBUG_CLAUDE (véase Endpoints de depuración) | No — opcional en Preferencias → Automatización |
La CLI nunca habla directamente con una VM. Cada subcomando es un cliente HTTP ligero sobre el socket de control, de modo que los mismos comandos funcionan localmente y —cuando el socket se tuneliza sobre SSH— contra una instancia remota desde un cliente enriquecido. Si no hay ningún agente en ejecución cuando invocas un comando que necesita uno, la CLI arranca automáticamente un agente en segundo plano sin ventana (bromure-cli run --headless) y espera hasta 40 segundos a que responda /health. Los comandos de solo lectura (vm ls, describe, trace …) no arrancan nada automáticamente; en su lugar imprimen No bromure-cli agent running.
Nota: El socket de control siempre está disponible mientras la app se ejecuta y es independiente del interruptor Activar servidor de automatización. Ese interruptor solo controla el listener TCP en el puerto 9223. No necesitas activar la API de automatización para usar la CLI
bromure-cli.
La línea de comandos bromure-cli
Puedes llamar al binario por su ruta completa dentro del paquete, pero la app ofrece una instalación única de un alias corto. Al iniciarse muestra un aviso —¿Instalar la herramienta de línea de comandos "bromure-cli"?— con los botones Instalar / Ahora no / No preguntar de nuevo. Al elegir Instalar se crea un enlace simbólico de /usr/local/bin/bromure-cli al binario de la app (un aviso de administrador). Bajo el nombre bromure-cli el binario oculta los comandos internos de la app —gestión de imágenes, el servidor mcp y el run predeterminado de la interfaz gráfica— y expone únicamente los grupos orientados a la terminal (Espacios de trabajo, Trazado, Inferencia local, Enterprise, remote); un bromure-cli sin argumentos imprime la ayuda en lugar de iniciar la app. Invocado como bromure-cli, todo está disponible y el subcomando predeterminado es run (la interfaz gráfica). Los ejemplos siguientes usan bromure-cli; sustitúyelo libremente por bromure-cli en los comandos que este expone.
Los comandos aceptan un id de espacio de trabajo, un prefijo de id corto o su nombre dondequiera que se muestre un argumento de espacio de trabajo. Los espacios de trabajo son las configuraciones de VM persistentes descritas en Espacios de trabajo; los grupos de comandos vm y workspaces son alias mutuos.
La app y el agente en segundo plano
| Sinopsis | Qué hace |
|---|---|
bromure-cli run [--headless] | Subcomando predeterminado (oculto) — inicia la interfaz gráfica. --headless ejecuta un agente accesorio de la barra de menús sin ventana; esto es lo que la CLI arranca automáticamente para servir el socket de control. |
Gestión de imágenes
La imagen base se instala una sola vez. Estos comandos están ocultos bajo el alias bromure-cli.
| Sinopsis | Qué hace |
|---|---|
bromure-cli init [--build-local] | Instala la imagen base de Ubuntu: descarga la imagen precompilada, recurriendo a una compilación local de aproximadamente 10 minutos si la descarga falla. --build-local fuerza la compilación local. |
bromure-cli info | Imprime la versión de la imagen base, el tamaño virtual, el tamaño en disco y la ruta. |
bromure-cli reset [--yes] | Elimina la imagen base (disco, variables EFI, marca de versión, estado) para que el siguiente init empiece de cero; pide confirmación salvo con --yes. |
bromure-cli init-foss-image --output <dir> | Solo canalización de publicación — compila la imagen base redistribuible de software exclusivamente libre en <dir>. |
bromure-cli verify-image --disk <path> [--timeout 300] | Solo canalización de publicación — arranca un clon desechable sin ventana y exige que aparezca el prompt de inicio de sesión serie dentro del tiempo de espera. |
Nota: No existe un subcomando
setup— eso pertenece al producto hermano Bromure (navegador). El comando de instalación de la imagen de Agentic Coding esinit. Si no existe ninguna imagen base, iniciar la interfaz gráfica te encamina en su lugar al flujo de configuración interno de la app.
Control de espacios de trabajo y VM
Este es el grupo central. vm run tiene forma deliberadamente de Docker: arranca un espacio de trabajo y entrega tu terminal a la sesión tmux compartida bromure del invitado.
| Sinopsis | Qué hace |
|---|---|
bromure-cli vm ls | Lista cada espacio de trabajo con su estado en vivo (apagado / suspendido / arrancando / en ejecución), tiempo de actividad, estado de conexión de ventana, las pestañas de tmux como un árbol (* marca la pestaña activa) y los contenedores Docker en ejecución. |
bromure-cli vm run [<workspace>] [-v <dir>]… [--name N --tool T --auth A --api-key K] [--memory GB] [-d] [--rm] | Inicia la VM de un espacio de trabajo, o crea uno desechable al vuelo. Por defecto: conecta tu terminal al tmux del invitado. |
bromure-cli vm attach <vm> [<tab#> | containers:<name> [-- <shell>]] [-w] | Conecta la terminal al tmux de la VM (opcionalmente saltando a una pestaña), hace docker exec -it a un contenedor en ejecución (shell predeterminado bash), o abre/reconecta la ventana de la interfaz gráfica con -w/--window. |
bromure-cli vm exec <vm> [-i] [-t] [--timeout 600] -- <command…> | Ejecuta un comando dentro de la VM (al estilo de kubectl, tras --). -it abre una pty interactiva; omite el comando con -it para obtener un shell. Los códigos de salida del invitado se propagan. |
bromure-cli vm kill <vm> [--suspend] | Detiene una VM: apagado ordenado, o suspensión (la RAM se guarda en disco) con --suspend. |
bromure-cli vm reboot <workspace> [--hard] | Reinicia un espacio de trabajo en ejecución en el sitio; ordenado por defecto, --hard lo derriba de inmediato. |
bromure-cli vm describe <workspace> | Imprime la configuración del espacio de trabajo más los detalles de tiempo de ejecución en vivo cuando está en ejecución (estado, IP, vCPU, estado de Fusion, uso de disco desde el df del invitado, pestañas, contenedores, memoria en uso). |
bromure-cli vm ports <workspace> (o vm <workspace> -L) | Muestra los puertos en escucha de un espacio de trabajo en ejecución (ss en vivo como root): PORT, PROTO, ADDRESS, PROCESS, marcando los enlaces solo de loopback. |
bromure-cli workspaces create [--name N] [--tool T] [--auth A] [--api-key K] [--memory GB] [--color C] [-v <dir>]… [--generate-ssh] [--from-json <file|->] | Crea un espacio de trabajo sin interfaz gráfica. --from-json aplica un documento JSON de perfil completo (los flags anulan los campos coincidentes); --generate-ssh acuña una clave SSH del lado del anfitrión e imprime la clave pública. |
bromure-cli workspaces edit <workspace> [--from-json <file|->] | Recupera la configuración completa del espacio de trabajo, la abre en $VISUAL/$EDITOR (con vi como alternativa) y guarda los cambios. Los secretos aparecen en blanco — deja en blanco para conservarlos, escribe para reemplazarlos. --from-json aplica un documento sin interacción. |
bromure-cli workspaces rm <workspace> [-f] | Elimina un espacio de trabajo y TODOS sus datos (disco + directorio home) tras una confirmación y/N, omitida con -f. |
bromure-cli workspaces ssh-keygen <workspace> | Genera una clave SSH nueva del lado del anfitrión para el espacio de trabajo e imprime la clave pública para tu host de Git. |
Vale la pena conocer algunos detalles operativos:
- Flags de
vm run.--toolesclaude,codexogrok;--authestoken,subscriptionobedrock.-v/--volume <hostdir>monta una carpeta del anfitrión en~/<basename>dentro del invitado (repetible, hasta 8).-d/--detacharranca la VM y regresa en lugar de conectarse.--rmelimina el espacio de trabajo y su disco cuando la VM se detiene. Desconéctate de un tmux conectado conCtrl-b d— eso deja la VM en ejecución. - Consciente del TTY. El comportamiento predeterminado al estilo de Docker de entregar la terminal a tmux solo se aplica en una terminal real; las invocaciones por tubería o mediante script se comportan silenciosamente como si hubieras pasado
-d. - Autenticación de
workspaces create. Paracreate,--authtambién aceptalocal. Los colores sonblue,red,green,orange,purple,pink,tealogray. - Conservar en blanco al editar.
workspaces editexporta toda la configuración con los secretos en blanco; un documento guardado con un secreto en blanco conserva el valor almacenado, de modo que un viaje de ida y vuelta nunca puede borrar tus claves. Un búfer sin cambios no guarda nada; un JSON no válido aborta. - Esperas de exec.
vm execespera hasta 10 segundos al agente de shell del invitado; un502significa que la VM puede no estar en ejecución o que el nombre no coincidió. Los avisos de aprobación que se disparan durante una sesión conectada se muestran en tu terminal (véase Consentimiento en terminales adjuntas), nunca dentro del invitado.
Modelos, enrutamiento y Fusion
La inferencia local se trata en profundidad en Modelos locales y la síntesis multimodelo en Fusion; los interruptores de la CLI son:
| Sinopsis | Qué hace |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | Administra los modelos locales de inferencia MLX — explora el catálogo curado, descarga con progreso en vivo, selecciona por espacio de trabajo, elimina. |
bromure-cli vm fusion enable|disable <vm> | Activa o desactiva Fusion en una VM en ejecución. Requiere que el espacio de trabajo tenga dos o más modelos configurados. |
bromure-cli vm routing cloud|local|hybrid <vm> | Establece el enrutamiento del backend de LLM para una VM en ejecución. |
bromure-cli vm hybrid budget <tokens> <vm> | ttft <seconds> <vm> | split <percent> <vm> | Ajusta el enrutamiento híbrido: límite de tokens de nube por cada 24 horas móviles (0 = ilimitado), umbral suave de reserva de tiempo hasta el primer token (5 s por defecto) y porcentaje de nuevas sesiones fijadas a local (0–100). |
fusion también acepta on/engage y off/disengage como sinónimos.
Inspección de trazas
Estos leen las trazas de sesión MITM por espacio de trabajo. No devuelven nada a menos que el espacio de trabajo tenga el trazado activado —véase Ajustes de trazado— y la historia completa está en Trazado.
| Sinopsis | Qué hace |
|---|---|
bromure-cli trace ls [workspace] [--limit 50] | Lista las solicitudes recientes: TIME / HOST / METHOD / STATUS / REQ / RESP / LAT / FLAGS (los flags incluyen swap×N, LEAK×N, conv). |
bromure-cli trace summary [workspace] | Agrega totales, clases de estado, recuentos de swap/leak/conversación y los hosts principales. |
bromure-cli trace hostnames [workspace] | Lista los hosts distintos y sus recuentos de solicitudes. |
bromure-cli trace leaks [workspace] | Muestra las solicitudes con supuestas fugas de credenciales (cabecera, vista previa, sospecha). |
bromure-cli trace clear [-f] | Borra el historial de trazas en memoria y en disco tras una confirmación y/N. |
Acceso remoto
La puerta de entrada SSH opcional está desactivada por defecto y documentada por completo en Acceso remoto. Todas las operaciones pasan por la app en ejecución a través del socket de control.
| Sinopsis | Qué hace |
|---|---|
bromure-cli remote [status] | Subcomando predeterminado — imprime el estado activado/en ejecución, el enlace y el puerto, los métodos de autenticación, la huella de la clave de host, el usuario de inicio de sesión, una línea de conexión lista para usar y las claves autorizadas. |
bromure-cli remote enable [--port 2222] [--bind 0.0.0.0] [--[no-]password] [--[no-]pubkey] | Activa el servidor SSH. Al menos un método de autenticación debe permanecer activo. |
bromure-cli remote disable | Apaga el servidor SSH. |
bromure-cli remote key add <key|path> / key [ls] / key rm <index|fingerprint> | Administra las claves públicas autorizadas (ls es el predeterminado). |
Inscripción en Enterprise
Contrapartes en la CLI de la hoja Inscribirse en bromure.io…, para el aprovisionamiento de dispositivos mediante script. Véase Enterprise.
| Sinopsis | Qué hace |
|---|---|
bromure-cli enroll --code <6-word-code> [--server-url URL] [--device-name NAME] | Inscribe este Mac en un espacio de trabajo de bromure.io usando un código acuñado por un administrador. El servidor toma por defecto $BROMURE_MANAGED_URL o https://bromure.io/api; el nombre del dispositivo toma por defecto el hostname del Mac. |
bromure-cli unenroll [--force] | Cierra la sesión del espacio de trabajo inscrito (y/N salvo con --force). |
bromure-cli enrollment-status | Imprime el estado de inscripción (espacio de trabajo, usuario, id de instalación, dispositivo, servidor, fecha de inscripción, presencia de bearer/certificado hoja). "not enrolled" sale con 0 para que la automatización no lo trate como un fallo. |
Comandos de integración e internos
| Sinopsis | Qué hace |
|---|---|
bromure-cli mcp [--debug] [--api-url http://127.0.0.1:9223] | Ejecuta el servidor MCP de AC en stdio para herramientas de IA. Véase El servidor MCP de AC. |
bromure-cli __remote-menu, __attach-window, __fatclient…, __forward…, __dial, __tunnel-helper | Puntos de entrada internos (la TUI del ForceCommand de SSH, la bomba de bytes de la terminal y los ayudantes de túnel del cliente enriquecido). No para uso interactivo. |
La TUI remota (__remote-menu)
Cuando el acceso remoto SSH está activado, cada inicio de sesión remoto se fuerza (mediante ForceCommand) hacia una interfaz de terminal ANSI hecha a mano en lugar de un shell — un minishell de pantalla alternativa y 256 colores gobernado por las teclas de flecha y los dígitos que funciona sobre cualquier PTY de SSH (usa ssh -t). Refleja toda la CLI como menús:
- Espacios de trabajo — crear con un formulario de una sola pantalla (Nombre, Herramienta, Autenticación, Clave API, Memoria, Color, Carpetas, Generar SSH, Configuración completa…, Crear), acciones por espacio de trabajo (Conectar, Nueva pestaña, Describir, Configurar…, Fusion, Enrutamiento, Worktrees…, Reiniciar…, Suspender, Detener para los espacios de trabajo en ejecución; Iniciar, Describir, Configurar…, Eliminar para los apagados) y una vista de tabla sin formato. Configurar… reproduce de forma nativa cada panel del editor de la interfaz gráfica.
- Modelos — los modelos instalados y el catálogo de descarga; al elegir un modelo no instalado se ofrece hacer
model pullen línea con progreso en vivo. - Trazas — Resumen / Nombres de host / Fugas / Recientes / Borrar.
Mientras estás conectado al tmux de un espacio de trabajo, un atajo de teclado mágico (por defecto Ctrl-], mostrado en el banner) hace aparecer una superposición de control dibujada por el anfitrión: un árbol de pestañas, Nueva pestaña, Worktrees…, Fusion, Enrutamiento, Editar configuración…, Reiniciar…, Suspender, Desconectar. El invitado nunca ve la tecla que la dispara — anúlala con el archivo remote/overlay-key o $BROMURE_OVERLAY_KEY. Ctrl-b d desconecta de tmux y vuelve al menú. La historia completa del acceso remoto y del cliente enriquecido, incluida la superposición y la configuración de la conexión, está en Acceso remoto.
La API de automatización de loopback
El plano de control también puede exponerse como JSON sobre HTTP en TCP para hacer scripting desde cualquier lenguaje. Está desactivado por defecto.
Activarla
Abre Bromure → Preferencias → Automatización — el panel API de automatización y servidor MCP.
- Activa Activar servidor de automatización. Cuando está activo, el panel indica Escuchando en 127.0.0.1:9223; desactivarlo detiene el servidor de inmediato.
- Opcionalmente establece el Puerto (el campo está rotulado (predeterminado: 9223)) y la Dirección de enlace (predeterminada
127.0.0.1). El puerto y la dirección de enlace surten efecto la próxima vez que se inicia el servidor — desactiva y vuelve a activar el interruptor para aplicarlos ahora.
También puedes accionar el interruptor sin la interfaz gráfica:
defaults write io.bromure.agentic-coding automation.enabled -bool true
Advertencia: Establecer la Dirección de enlace en algo distinto de
127.0.0.1expone la API —y el servidor MCP que la respalda— a la red, y el panel advierte Un enlace fuera de loopback expone la API a la red. El servidor MCP no tiene autenticación. No hay autenticación en el listener TCP más allá del límite de loopback y de la puertaBROMURE_DEBUG_CLAUDEque se describe abajo. Deja la dirección de enlace en loopback a menos que tengas una razón específica y de confianza para no hacerlo.
Modelo de autenticación
El listener TCP y el socket de control sirven las mismas rutas, pero con acceso distinto:
| Grupo de rutas | Socket de control | API de automatización (loopback TCP) |
|---|---|---|
| Listado de perfiles y sesiones, apertura/cierre de sesiones | Permitido | Permitido |
Control de VM, exec, /app/state, /debug/* | Permitido | Requiere BROMURE_DEBUG_CLAUDE en la app |
remote, /state, automations, grid-layout, prompts | Permitido | Solo socket de control |
En otras palabras: el socket de control es la vía de acceso completo, exclusiva del propietario; la API TCP abre el subconjunto seguro en loopback y protege las rutas potentes tras el flag de depuración. Los segmentos de ruta están codificados con un único porcentaje (para que funcionen los nombres de espacio de trabajo con espacios) y se aceptan cuerpos de solicitud de hasta 8 MB.
Endpoints para scripting
Las rutas más útiles:
| Endpoint | Transporte | Propósito |
|---|---|---|
GET /health | Ambos | Comprobación de vida más debugEnabled. |
GET /state | Socket | Instantánea única de la réplica: espacios de trabajo, VM, disposición de la cuadrícula, automatizaciones, pendingPrompts, subred vmnet. |
GET /vms | Ambos | Lista las VM en ejecución. |
POST /vms | Ambos (con puerta de depuración en TCP) | Arranca una VM a partir de una referencia de perfil o una especificación en línea más montajes. |
GET /sessions / POST /sessions | Ambos | Lista sesiones; abre una sesión para un espacio de trabajo. |
GET /profiles / POST /profiles | Ambos | Lista espacios de trabajo; crea uno a partir de un documento JSON (?full=1 devuelve el documento completo con los secretos en blanco). |
POST /vms/<id>/exec | Ambos (con puerta de depuración en TCP) | Ejecuta un comando en una VM; interactive secuestra la conexión hacia un flujo de pty enmarcado en crudo. |
GET /automations / POST /automations/<id>/run | Socket | Lee y controla las automatizaciones programadas (véase Automatizaciones programadas). |
POST /prompts/<id>/answer | Socket | Responde a un prompt de ciclo de vida en cola (véase Responder a los prompts pendientes). |
Como la ruta del socket de control contiene espacios, captúrala primero en una variable:
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
# Full mirror snapshot (control socket only)
curl --unix-socket "$SOCK" http://localhost/state
# List running VMs (control socket — no debug flag needed here)
curl --unix-socket "$SOCK" http://localhost/vms
# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
-d '{"profile":"Claude Dev"}'
# Answer a queued lifecycle prompt with one of its offered button labels
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Not Now"}'
El subconjunto seguro funciona sobre la API TCP una vez la has activado — por ejemplo, listar y abrir sesiones no necesita ningún flag de depuración:
# List sessions
curl http://127.0.0.1:9223/sessions
# Open a session for a workspace
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Claude Dev"}'
Nota:
GET /vms(listar las VM en ejecución) está disponible sobre la API de automatización TCP sin ningún flag de depuración. Las rutas de VM que mutan —POST /vms(arrancar una VM) yPOST /vms/<id>/exec— requierenBROMURE_DEBUG_CLAUDEsobre TCP; contrólalas a través del socket de control (como arriba) cuando no quieras ejecutar la app en modo de depuración. Toda la superficie de endpoints —incluidas las acciones de worktree y pestaña,/trace,/remotey las rutas de réplica del cliente enriquecido— se resume en el Apéndice.
El servidor MCP de AC (bromure-cli mcp)
bromure-cli mcp ejecuta un servidor MCP de JSON-RPC en stdio (nombre de servidor bromure-cli) que permite a una herramienta de IA administrar la app. Envuelve la API HTTP de automatización y AppleScript, así que activa primero el servidor de automatización — las herramientas de listado de sesiones y perfiles llaman a la API HTTP en --api-url (predeterminado http://127.0.0.1:9223).
Las herramientas que expone:
bromure_ac_list_profiles,bromure_ac_list_sessionsbromure_ac_open_session(espera hasta 30 segundos a la ventana),bromure_ac_close_sessionbromure_ac_get_profile,bromure_ac_set_profile(reemplazo JSON atómico, se conserva el id)bromure_ac_get_profile_setting,bromure_ac_set_profile_setting(las claves incluyenname,color,comments,tool,authMode,apiKey,closeAction,memoryGB,folderPathsCount,mcpServerCount,keyboardLayoutOverride,keyRepeatDelayMs,keyRepeatRateHz)
Con --debug (y BROMURE_DEBUG_CLAUDE establecido en la app) añade bromure_ac_app_state, bromure_ac_vm_exec, bromure_ac_vm_read_file y bromure_ac_vm_write_file.
Para conectarlo a Claude Code, añade lo siguiente a ~/.config/claude-code/.mcp.json (o el equivalente de tu cliente). Este es el fragmento exacto que la sección Configuración del cliente MCP del panel de Preferencias ofrece para copiar:
{
"mcpServers": {
"bromure-cli": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-cli",
"args": ["mcp"]
}
}
}
Nota: Las herramientas de perfil
get/setinvocanosascript(AppleScript contra la app en ejecución), por lo que la app gráfica debe estar en ejecución y macOS puede pedir una vez el permiso de Automatización. El JSON de perfil viaja con los secretos en blanco a menos queBROMURE_DEBUG_CLAUDEesté establecido.
El servidor MCP del navegador en el espacio de trabajo
Al margen del servidor MCP de AC, a cada agente de un espacio de trabajo se le asigna automáticamente un servidor MCP browser — sin configuración. Controla el Chromium integrado del espacio de trabajo, que se ejecuta en su propia VM desechable. El panel MCP del editor del espacio de trabajo describe los servidores MCP propios del espacio de trabajo; el servidor de navegador integrado está siempre presente por encima de lo que añadas allí.
El servidor expone 23 herramientas de navegación e inspección — browser_navigate, browser_new_tab, browser_list_tabs, browser_activate_tab, browser_close_tab, browser_back, browser_forward, browser_reload, browser_screenshot (con opción de página completa), browser_evaluate, browser_get_text, browser_get_html, browser_get_links, browser_click, browser_fill, browser_type, browser_press_key, browser_wait_for, browser_network, browser_network_summary, browser_clear_network, browser_console y browser_pick_element (un selector de elementos interactivo de 60 segundos).
El transporte es una capa stdio de Python generada, bromure-browser-mcp.py, dispuesta en modo de solo lectura dentro del invitado en /mnt/bromure-meta/. Marca el anfitrión sobre el puerto vsock 5830 y se reconecta indefinidamente ante las caídas, de modo que el cliente MCP nunca retira las herramientas. Una llamada de herramienta contra un navegador cerrado lo abre y espera al arranque en frío. Como el navegador es una VM separada, las instrucciones del servidor advierten a los agentes que alcancen el servidor de desarrollo de un espacio de trabajo por la IP de LAN del espacio de trabajo (hostname -I), nunca localhost.
Nota: En un cliente enriquecido, el flujo del navegador-MCP del agente puede empalmarse sobre un canal SSH para que un agente remoto controle el panel del navegador que ves localmente. Solo hay un relé activo a la vez. Véase Acceso remoto.
Los servidores MCP HTTP que añades en el editor pueden autenticarse a través del intermediario OAuth del lado del anfitrión: realiza el descubrimiento RFC 8414 y el registro dinámico de cliente RFC 7591 (como Bromure AC), ejecuta un flujo de código de autorización PKCE en el navegador de tu sistema y sirve la retrollamada en un listener de loopback (puertos 28500–28599). La página de éxito dice Autorizado — Puedes cerrar esta pestaña y volver a Bromure AC. Todo el flujo se ejecuta en el anfitrión, de modo que la VM nunca ve credenciales OAuth reales.
AppleScript (Bromure AC Suite)
Un diccionario de scripting, el Bromure AC Suite, es una tercera superficie de automatización — útil para la orquestación y para las herramientas de captura de pantalla que necesitan IDs de ventana. Apunta a application "Bromure Agentic Coding" desde Script Editor o osascript. Abarca:
- Perfiles —
list profiles,create ac profile <name> [color <c>](devuelve un UUID),delete ac profile <name|uuid>y el viaje de ida y vuelta del documento completo medianteget profile json/set profile json(todo el perfil Codable; se conserva el id; los secretos almacenados se fusionan bajo los campos en blanco). - Ajustes por campo —
get profile setting … key …/set profile setting … key … to value …. - Ventanas del editor —
open profile manager,open ac profile editor,close ac profile editor,select editor category <key>yget editor window id/get main window id(unCGWindowIDparascreencapture -l). - Sesiones —
open ac session,close ac session,list ac sessions. - Estado y ajustes de la app —
get app state(JSON), másget ac app setting/set ac app settingpara las clavesautomation.enabled,automation.port,automation.bindAddress,remoteAccess.enabled,remoteAccess.port,remoteAccess.bindAddress,managed.serverURLymanaged.acIngestURL. Establecerautomation.enabledacciona el servidor HTTP en vivo.
Por ejemplo, para abrir una sesión:
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Claude Dev"'
Nota: El JSON de perfil viaja con los secretos depurados a menos que
BROMURE_DEBUG_CLAUDEesté establecido. EstablecerapiKeyen una cadena vacía medianteset profile settingborra la clave en lugar de conservarla — a diferencia del comportamiento de conservar-en-blanco de los puentes de ida y vuelta JSON. El cambio de idioma deliberadamente no es scriptable; relanza la app con, por ejemplo,-AppleLanguages "(fr)"en su lugar.
Automatizaciones programadas
Una automatización programada es una ejecución de agente recurrente y desatendida vinculada a un espacio de trabajo: cuando se dispara, crea un worktree de git nuevo y lanza allí el agente elegido con tu prompt, y la ejecución aparece como una pestaña de worktree corriente. Las automatizaciones se crean y administran desde el tablero de automatizaciones (⇧⌘A, o la sección AUTOMATIZACIONES de la barra lateral), y toda la funcionalidad —disparadores, sintaxis de programación, encadenamiento, la pantalla de inyección obligatoria, el historial de ejecuciones y dónde persisten las automatizaciones— está documentada en Automatizaciones. Esta sección cubre solo la superficie del plano de control que la funcionalidad expone: controlar las automatizaciones a través de la API, responder a los prompts de decisión que una ejecución desatendida puede plantear y cómo funciona el consentimiento sobre una terminal conectada.
Controlar las automatizaciones a través de la API
Toda la funcionalidad se refleja en el socket de control para el cliente enriquecido:
| Endpoint | Propósito |
|---|---|
GET /automations | Lista las automatizaciones y su historial de ejecuciones. |
POST /automations | Crea o actualiza (upsert) una automatización. |
DELETE /automations/<id> | Elimina una automatización. |
POST /automations/<id>/run | La dispara ahora (no cambia la programación). |
POST /automations/<id>/toggle | La pausa o la reanuda. |
Responder a los prompts pendientes
Algunas decisiones de ciclo de vida —una ampliación de almacenamiento, un restablecimiento por desviación, un borrado por compromiso— normalmente aparecen como un aviso local. Cuando las dispara un cliente enriquecido remoto en su lugar, se ponen en cola en vez de mostrarse en el anfitrión: aparecen en GET /state bajo pendingPrompts (cada uno con un id, profileID, title, message y etiquetas de botón) y se responden con POST /prompts/<id>/answer:
SOCK="$HOME/Library/Application Support/BromureAC/control.sock"
curl --unix-socket "$SOCK" -X POST http://localhost/prompts/PROMPT_ID/answer \
-d '{"choice":"Upgrade"}'
Pasa como choice una de las propias etiquetas de botón del prompt. Si ningún cliente responde en 180 segundos, el prompt se resuelve con su alternativa segura (cancelar / ahora no — nunca la opción destructiva); si ningún cliente ha sondeado /state en 10 segundos, recurre a la alternativa de inmediato. Estas rutas son solo del socket de control. Un cliente enriquecido muestra estos prompts como avisos locales corrientes.
Consentimiento en terminales adjuntas
Mientras una terminal está conectada interactivamente a una sesión —mediante vm exec -it, vm attach o una conexión SSH— los avisos de aprobación del lado del anfitrión (uso de credenciales y similares) se muestran en tu terminal, no dentro del invitado. El aviso dice 🔒 Bromure — se requiere aprobación con opciones numeradas y Choice [1-N] (Enter or timeout = deny). Enter, tiempo de espera, EOF o desconectarse significan todos denegar, de modo que un invitado comprometido nunca puede falsificar una aprobación. El tmux del invitado se vuelve a pintar después.
Endpoints de depuración (BROMURE_DEBUG_CLAUDE)
Iniciar la app con BROMURE_DEBUG_CLAUDE establecido desbloquea rutas adicionales en la API de automatización TCP y levanta la puerta de depuración sobre el control de VM:
POST /sessions/<id>/execy las rutas de control/vms/…sin el socket de control.GET /app/state.GET /debug/ui-shot?path=…&which=unified|picker|editor— la app renderiza su propia ventana en un PNG (sin necesidad del permiso de Grabación de pantalla) y devuelve un volcado de marcos de subvistas; la salida predeterminada es/tmp/bromure-ui-shot.png.POST /debug/editor— controla el editor de ajustes para la herramienta de captura de pantalla.POST /detect/prompt-injection— ejecuta los detectores reales y devuelve su veredicto (esta ruta requiere el flag de depuración incluso en el socket de control).
El flag también permite que los secretos viajen tal cual a través de los puentes de JSON de perfil de AppleScript y MCP, y lo requieren las herramientas de VM de bromure-cli mcp --debug. GET /health informa debugEnabled para que puedas saber en qué modo está la app.
Advertencia:
BROMURE_DEBUG_CLAUDEelimina la puerta de seguridad que normalmente mantieneexec, el control de VM y los secretos de perfil en crudo fuera de la API TCP de loopback. Ejecuta la app con él solo en una máquina que controles, y nunca lo combines con una dirección de enlace fuera de loopback — hacerlo expondría el acceso completo al shell de la VM, secretos sin redactar y capturas de ventana a cualquiera que pueda alcanzar el puerto. Es distinto deBROMURE_AC_DEBUG(registro de eventos por stderr) yBROMURE_CLI_DEBUG(diagnósticos del socket de la CLI), que son interruptores de registro inofensivos. Los endpoints de depuración, todas las variables de entorno y cada ubicación de archivo mencionada en este capítulo están catalogados en el Apéndice.