CLI, API y MCP
Todo lo que hace la app también se puede manejar sin su ventana. El binario de la app — bromure-ac, dentro de Bromure Agentic Coding.app/Contents/MacOS/ — es también una CLI de varios comandos, un plano de control HTTP, un servidor MCP para herramientas de IA externas y un destino de AppleScript. Dentro de cada VM, un conjunto de servidores MCP integrados da a los agentes su propia vista de Bromure. Este capítulo es la referencia de todos ellos.
Las superficies, de fuera hacia dentro:
- La línea de comandos
bromure-cli— una CLI al estilo Docker/kubectl para máquinas, VM, terminales, comandos, trazas, modelos, acceso remoto e inscripción. - El plano de control — las mismas operaciones como JSON sobre HTTP, en un socket Unix solo para el propietario y, opcionalmente, en un puerto TCP de loopback.
- El servidor MCP de AC (
bromure-ac mcp) — permite que una herramienta de IA en tu Mac (Claude Code, Claude Desktop) gestione la app. - Los servidores MCP dentro del invitado — integrados en cada VM: el navegador, las automatizaciones, la infraestructura, la delegación y, para sesiones concretas, el tablero de tareas y la Centralita.
- AppleScript — el diccionario Bromure AC Suite.
A lo largo de este capítulo, y en la CLI, una máquina se llama espacio de trabajo (su nombre en el editor de ajustes y en la línea de comandos). Las sesiones en el sentido de conversaciones de agente se alcanzan mediante las rutas /agent-sessions; las rutas antiguas /sessions y el término session en la CLI y en AppleScript se refieren a la ventana de una máquina.
El plano de control: socket y API
Cada superficie habla HTTP con la app en ejecución mediante 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; la mayoría de las rutas de control requieren además la variable de entorno BROMURE_DEBUG_CLAUDE, y algunas nunca se sirven por TCP (consulta Modelo de autenticación) | No — activación explícita en Preferencias › Automatización |
La CLI nunca habla directamente con una VM. Cada subcomando es un cliente HTTP ligero sobre el socket de control, así que los mismos comandos funcionan en local y — cuando el socket se tuneliza por SSH — contra una instancia remota desde un cliente enriquecido. Si no hay ningún agente en ejecución cuando invocas un comando que lo necesita, la CLI arranca automáticamente un agente en segundo plano sin ventana (bromure-ac run --headless) y espera hasta 40 segundos a que responda a /health. Los comandos de solo lectura (vm ls, describe, trace …) no arrancan nada; en su lugar muestran No bromure-ac agent running..
Nota: El socket de control está siempre 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.
La línea de comandos bromure-cli
Puedes llamar al binario por su ruta completa dentro del paquete, pero el nombre corto es más cómodo. Elige Bromure Agentic Coding › Instalar herramienta de línea de comandos… en el menú de la app. La alerta ¿Instalar la herramienta de línea de comandos “bromure-cli”? explica que crea un enlace simbólico en /usr/local/bin/bromure-cli y que necesita tu contraseña de administrador una vez; haz clic en Instalar (o Cancelar). Si todo va bien, Herramienta de línea de comandos instalada te indica que ejecutes bromure-cli --help. La app ya nunca lo ofrece al arrancar — el elemento de menú es la única vía, y puedes volver a ejecutarlo en cualquier momento (por ejemplo, tras mover la app).
El mismo binario se comporta de forma distinta según el nombre con el que se le llame:
- Como
bromure-cli, oculta los comandos internos de la app — la gestión de imágenes (init,info,resety las herramientas del pipeline de publicación), el servidormcpy elrunpredeterminado de la interfaz gráfica — y expone solo los grupos pensados para el terminal (Workspaces, Tracing, Local inference, Enterprise features,remote). Unbromure-clia secas muestra la ayuda en lugar de abrir la app. - Como
bromure-ac(el binario dentro del paquete de la app), todo está disponible y el subcomando predeterminado esrun, que abre la interfaz gráfica.
Los ejemplos de abajo usan bromure-cli; usa la ruta completa …/MacOS/bromure-ac para los comandos que solo él expone.
Los comandos aceptan el id de un espacio de trabajo, un prefijo corto del id o su nombre allí donde aparece un argumento de espacio de trabajo. Los grupos de comandos vm y workspaces son alias el uno del otro. Qué es una máquina, y cómo se relaciona con las sesiones, se explica en Máquinas.
La app y el agente en segundo plano
| Sinopsis | Qué hace |
|---|---|
bromure-ac run [--headless] | Subcomando predeterminado (oculto) — abre la interfaz gráfica. --headless ejecuta un agente accesorio de la barra de menús sin ventana; 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 solo existen con el nombre bromure-ac.
| Sinopsis | Qué hace |
|---|---|
bromure-ac init [--build-local] | Instala la imagen base de Ubuntu: descarga la imagen precompilada y, si la descarga falla, recurre a una compilación local. --build-local fuerza la compilación local. |
bromure-ac info | Muestra la versión de la imagen base, su tamaño virtual, su tamaño en disco y su ruta. |
bromure-ac reset [--yes] | Elimina la imagen base (disco, variables EFI, marca de versión, estado) para que el próximo init empiece de cero; pide confirmación salvo con --yes. |
bromure-ac init-foss-image --output <dir> | Solo pipeline de publicación — compila en <dir> la imagen base redistribuible compuesta solo por software libre. |
bromure-ac verify-image --disk <path> [--timeout 300] | Solo pipeline de publicación — arranca sin interfaz un clon desechable y exige el prompt de inicio de sesión serie dentro del plazo. |
Nota: Si no existe imagen base, al abrir la interfaz gráfica llegas al asistente de configuración inicial, que instala la imagen en el sitio — consulta Instalación y primer arranque.
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 vm fsck <workspace> [--repair] [--home] | Comprueba el disco del sistema de un espacio de trabajo detenido — o su imagen home con --home — desde el Mac, sin VM y sin herramientas adicionales. --repair reproduce el journal del sistema de archivos y borra un indicador de error obsoleto. Consulta Comprobar un disco desde la línea de comandos. |
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. Borrar una clave en el editor vacía ese campo. --from-json aplica un documento sin interacción; puede ser parcial: una clave ausente conserva su valor, un null explícito lo vacía. |
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:
- Opciones de
vm run.--toolrecibe un id de agente:claude,codex,grok,kimiuomp.--authestoken,subscription,bedrockolocal. Un valor no reconocido es un error que enumera los valores válidos, por ejemploInvalid --tool “gpt” — expected one of: claude | codex | grok | kimi | omp.;workspaces createcomprueba--tooly--authde la misma manera.-v/--volume <hostdir>monta una carpeta del anfitrión en~/<basename>dentro del invitado (repetible, hasta 8).-d/--detacharranca la VM y vuelve en lugar de adjuntarse.--rmelimina el espacio de trabajo y su disco cuando la VM se detiene. Desconéctate de un tmux adjunto conCtrl-b d— la VM sigue en ejecución. - Los agentes vienen de Modelos. Las opciones de herramienta y autenticación solo inicializan un espacio de trabajo nuevo. El modelo y el proveedor que usa realmente cada agente vienen de Preferencias › Modelos y del panel Modelos del propio espacio de trabajo — consulta Modelos y proveedores.
- Sensible al TTY. El comportamiento predeterminado al estilo Docker, que entrega el terminal a tmux, solo se aplica en un terminal real; las invocaciones por tubería o desde scripts se comportan como si hubieras pasado
-d. - Valores de
workspaces create. 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.
Comprobar un disco desde la línea de comandos
vm fsck es el gemelo programable de Ejecutar fsck… en el navegador ext4 y del botón Reparar disco que la app muestra cuando un arranque se detiene por errores del sistema de archivos. Usa el comprobador ext4 propio de Bromure, así que no hay que instalar nada.
bromure-cli vm kill "Web app" # the workspace must be stopped
bromure-cli vm fsck "Web app" # check the system disk, report only
bromure-cli vm fsck "Web app" --repair # replay the journal, clear the error flag
bromure-cli vm fsck "Web app" --home # check the home image instead
Se niega a ejecutarse mientras el espacio de trabajo está en marcha. La salida termina con uno de estos resúmenes: «Filesystem is clean.», «Filesystem repaired; it is now consistent.» o «Filesystem has errors this checker cannot repair.». Una comprobación sin --repair que encuentra problemas sugiere volver a ejecutarla con --repair. El comando termina con el estado 4 mientras queden errores. El alcance y los límites del comprobador se describen en Avanzado.
Modelos, enrutamiento y Fusion
Los ajustes de modelos y proveedores se tratan en Modelos y proveedores y la síntesis multimodelo en Fusion; los interruptores de la CLI son:
| Sinopsis | Qué hace |
|---|---|
bromure-cli model catalog|ls|pull|use|rm … | Gestiona los modelos MLX en el dispositivo — explorar el catálogo seleccionado (con insignias de ajuste a la RAM y de llamadas a herramientas), descargar con progreso en vivo, fijar el modelo activo del espacio de trabajo de una VM en ejecución, eliminar. |
bromure-cli vm fusion enable|disable <vm> | Activa o desactiva Fusion en una VM en ejecución. El espacio de trabajo debe tener dos o más modelos configurados. Se aceptan on/engage y off/disengage como sinónimos. |
bromure-cli vm routing cloud|local <vm> | Establece el enrutamiento del backend de LLM de una VM en ejecución: los proveedores en la nube de los agentes, o el modelo local. |
Inspección de trazas
Estos leen las trazas del proxy por espacio de trabajo. No devuelven nada salvo que el espacio de trabajo tenga el trazado activado — consulta Ajustes de trazado — y la historia completa está en Trazado y auditoría.
| 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 y clientes. 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 Iniciar sesión 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-ac mcp [--debug] [--api-url http://127.0.0.1:9223] | Ejecuta el servidor MCP de AC sobre stdio para herramientas de IA. Consulta El servidor MCP de AC. |
__remote-menu, __attach-window, __fatclient…, __forward…, __dial, __tunnel-helper | Puntos de entrada internos (la TUI ForceCommand de SSH, la bomba de bytes del terminal y los asistentes de túnel del cliente enriquecido). No son para uso interactivo. |
La TUI remota (__remote-menu)
Cuando el acceso remoto por SSH está activado, cada inicio de sesión remoto se fuerza (mediante ForceCommand) a una interfaz de terminal ANSI hecha a mano en lugar de una shell — un menú de pantalla alternativa, de 256 colores, manejado con las flechas y los dígitos, que funciona sobre cualquier PTY de SSH (usa ssh -t). Refleja la CLI en forma de menús:
- Espacios de trabajo — creación con un formulario de una sola pantalla (Name, Tool, Auth, API key, Memory, Color, Folders, Generate SSH, Full settings…, Create), acciones por espacio de trabajo (Attach, New tab, Describe, Configure…, Fusion, Routing, Worktrees…, Reboot…, Suspend, Kill para los que están en ejecución; Start, Describe, Configure…, Delete para los apagados) y una vista de tabla en bruto. Configure… ofrece los paneles del editor de ajustes como formularios de texto; su formulario Models es de solo lectura (los proveedores del servidor, y si el espacio de trabajo los sobrescribe), ya que los modelos se eligen en la app.
- 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 adjunto al tmux de un espacio de trabajo, una combinación de teclas mágica (por defecto Ctrl-], mostrada en el banner) hace aparecer una superposición de control dibujada por el anfitrión: un árbol de pestañas, New tab, Worktrees…, Fusion, Routing, Edit settings…, Reboot…, Suspend, Disconnect. El invitado nunca ve la tecla de activación — cámbiala con el archivo remote/overlay-key o $BROMURE_OVERLAY_KEY. Ctrl-b d te desconecta de tmux y vuelve al menú. La TUI remota trabaja con las máquinas y sus terminales; las sesiones de agente, las salas y la Centralita se alcanzan en cambio desde el cliente enriquecido. La historia completa del acceso remoto está en Acceso remoto y clientes.
La API de automatización de loopback
El plano de control también puede exponerse como JSON sobre HTTP por TCP, para scripts en cualquier lenguaje. Está desactivado por defecto.
Activarla
Abre 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, define el Puerto (con la leyenda (predeterminado: 9223)) y la Dirección de enlace (por defecto
127.0.0.1). El puerto y la dirección de enlace surten efecto la próxima vez que arranque el servidor — apaga y vuelve a encender el interruptor para aplicarlos ya.
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) |
|---|---|---|
GET /health, GET /profiles, GET /vms, GET/POST /sessions | Permitido | Permitido |
Creación y edición de espacios de trabajo (POST /profiles, /profiles/<id>…), control de VM y exec (POST /vms, /vms/<id>/…), /trace, /app/state, /preferences, /models/settings, sesiones de agente, salas, delegaciones, tareas, automatizaciones, clústeres y registros | Permitido | Requiere BROMURE_DEBUG_CLAUDE en la app |
/state, /state/subscribe, /remote…, /grid-layout, /workspaces, /subscriptions/…, /models/<action>, /connector | Permitido | Nunca — solo socket de control |
Dicho de otro modo: el socket de control es la vía de acceso total, solo para el propietario; la API TCP abre el subconjunto seguro en loopback y deja todo lo demás tras el indicador de depuración. Los segmentos de ruta se codifican en porcentaje una sola vez (para que funcionen los nombres de espacios de trabajo con espacios).
Endpoints para scripting
Las rutas más útiles:
| Endpoint | Propósito |
|---|---|
GET /health | Señal de vida, más debugEnabled. |
GET /state | Instantánea puntual de la réplica: espacios de trabajo, VM, disposición de la cuadrícula, automatizaciones, pendingPrompts y más. |
GET /state/subscribe | La forma push de /state: la conexión permanece abierta y se transmite una instantánea nueva cada vez que cambia el estado. Los clientes enriquecidos la usan en lugar de sondear. |
GET /vms / POST /vms | Lista las VM en ejecución; arranca una VM a partir de una referencia de espacio de trabajo o de una especificación en línea con montajes (lo que llama vm run). |
POST /vms/<id>/exec | Ejecuta un comando en una VM; interactive convierte la conexión en un flujo pty en bruto con tramas. |
GET /profiles / POST /profiles | Lista los espacios de trabajo; crea uno a partir de un documento JSON. |
GET / PUT /preferences | Lee o sustituye la plantilla Defaults de Preferencias (secretos en blanco al leer, conservados si se dejan en blanco al escribir). Es lo que edita la ventana de Preferencias de un cliente enriquecido en un anfitrión remoto. |
GET / PUT /models/settings | Lee o sustituye los ajustes de modelos globales (Preferencias › Modelos), con las claves ocultas. |
POST /subscriptions/register / POST /subscriptions/forget | Inicia en este anfitrión, para un cliente, un inicio de sesión en un proveedor ({"provider": …, "profileId": …}; la URL de inicio de sesión vuelve a través de /state), u olvida un inicio de sesión guardado. |
POST /agent-sessions/start | Inicia una sesión de agente (profile, tool y, opcionalmente, una carpeta, un repositorio o un mensaje inicial). |
POST /agent-sessions/<id>/<action> | Actúa sobre una sesión: send, keys, resume, close, rename, nickname, archive, unarchive, delete, review y las acciones de rama (worktree, branch-merge, branch-pr, branch-discard, branch-keep, branch-decline). |
GET /agent-sessions/<id>/transcript, GET /agent-sessions/<id>/pending | La conversación de una sesión (JSONL en base64) y lo que está esperando (una pregunta y sus opciones). |
POST /agent-sessions/switchboard | Inicia o muestra la Centralita. |
POST /agent-rooms/create|move|group, POST /agent-rooms/<id>/rename|color|layout|archive|unarchive|ungroup|delete|switchboard | Crea y edita salas. |
POST /delegations/request, POST /delegations/<id>/<action>, GET /delegations/<id>/file | Delegación entre anfitriones: la sesión de un anfitrión pide algo a una sesión de otro y luego envía, responde, corrige el rumbo, cierra o cancela, y obtiene los archivos adjuntos. |
GET / POST /tasks, /tasks/<id>/… | Lee y maneja el tablero de Tareas de código. |
GET / POST /k8s, /k8s/<id>/<action>, POST /registries, /registries/<id>/<action> | Crea y maneja clústeres de Kubernetes y registros. |
GET /automations / POST /automations/<id>/run | Lee y maneja automatizaciones programadas (consulta Controlar las automatizaciones mediante la API). |
POST /prompts/<id>/answer | Responde a un prompt de ciclo de vida en cola (consulta Responder a 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
curl --unix-socket "$SOCK" http://localhost/vms
# Boot a workspace by name
curl --unix-socket "$SOCK" -X POST http://localhost/vms \
-d '{"profile":"Web app"}'
# 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 por la API TCP una vez que la activas — por ejemplo, listar los espacios de trabajo y abrir la ventana de una máquina no necesita el indicador de depuración:
curl http://127.0.0.1:9223/profiles
curl -X POST http://127.0.0.1:9223/sessions -d '{"profile":"Web app"}'
Nota: Las rutas del plano de control son una superficie de integración compartida con el cliente enriquecido, no una API pública versionada; la forma de sus peticiones y respuestas puede cambiar entre versiones. Los comandos de la CLI de arriba son la forma estable de automatizar Bromure con scripts. Las rutas solo de depuración, las variables de entorno y las ubicaciones de archivos están catalogadas en el Apéndice.
El servidor MCP de AC (bromure-ac mcp)
bromure-ac mcp ejecuta un servidor MCP JSON-RPC sobre stdio (nombre del servidor bromure-ac) que permite a una herramienta de IA en tu Mac gestionar la app. Envuelve la API HTTP de automatización y AppleScript, así que activa primero el servidor de automatización — las herramientas de listado y de ventanas llaman a la API HTTP en --api-url (por defecto http://127.0.0.1:9223). No está disponible con el nombre bromure-cli.
Las herramientas que expone:
bromure_ac_list_profiles,bromure_ac_list_sessionsbromure_ac_open_session(abre la ventana de un espacio de trabajo; espera hasta 30 segundos),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
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 al equivalente de tu cliente). Es exactamente el fragmento que muestra la sección Configuración del cliente MCP del panel Automatización:
{
"mcpServers": {
"bromure-ac": {
"command": "/Applications/Bromure Agentic Coding.app/Contents/MacOS/bromure-ac",
"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.
Servidores MCP dentro de las VM
Aparte del servidor MCP de AC, Bromure da a los agentes de cada VM un conjunto de servidores MCP integrados — sin configuración alguna. Cada uno es un pequeño adaptador Python stdio colocado en solo lectura dentro del invitado en /mnt/bromure-meta/; el adaptador se conecta al anfitrión por vsock y se reconecta indefinidamente si se corta, así que el agente nunca pierde sus herramientas. El anfitrión sirve las herramientas, y cada llamada se comprueba allí: un agente solo puede ver y tocar aquello a lo que tienen derecho su propia máquina y su sesión.
| Puerto vsock | Servidor | Quién lo recibe | Herramientas |
|---|---|---|---|
| 5830 | browser | Todos los agentes | Las 23 herramientas browser_* que manejan el Chromium integrado de la máquina (consulta más abajo). |
| 5831 | task board | Solo los agentes que ejecutan una tarea de código | board_get_task, board_set_plan, board_create_subtasks, board_set_dependencies, board_ready_for_review, board_report_landing. |
| 5832 | plan stream | Ejecuciones de planificación de tareas de código | No es un servidor MCP: el canal por el que la ejecución de planificación de una tarea transmite su plan al tablero. |
| 5833 | automations | Todos los agentes | automation_list, automation_get, automation_create, automation_update, automation_delete, automation_run — limitadas a las automatizaciones de la propia máquina del agente. Consulta Automatizaciones. |
| 5834 | infrastructure | Todos los agentes | infrastructure_overview, cluster_status, cluster_create, cluster_start, registry_status, registry_create, registry_start — limitadas a los clústeres y registros a los que la máquina tiene acceso. Consulta Clústeres de Kubernetes y registros. |
| 5835 | delegation | Todas las sesiones de agente | delegate, request, list_peers, list_delegations, read_inbox, wait, ask, report, deliver, answer, steer, close_delegation, cancel, worktree_create, worktree_status, worktree_merge. El adaptador indica al anfitrión en qué ventana de tmux se ejecuta, así que un agente no puede hacerse pasar por otra sesión. Consulta Agentes trabajando juntos. |
| 5836 | switchboard | Solo la sesión de la Centralita | list_sessions, read_session, pending_question, list_workspaces, next_events, send_to_session, answer_question, press_keys, start_session, resume_session, message_user, archive_session. |
Los servidores browser, automations, infrastructure y delegation se escriben en la configuración MCP propia de cada agente, junto a los servidores que añades en el panel MCP de la máquina (Ajustes de MCP). Los servidores task board y switchboard solo se pasan a las ejecuciones que los necesitan.
El servidor browser
El servidor browser maneja el Chromium integrado de la máquina, que se ejecuta en su propia VM desechable. Sus 23 herramientas cubren la navegación y la 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 interactivo de elementos de 60 segundos).
Una llamada a una herramienta con el navegador cerrado lo abre y espera al arranque en frío. Como el navegador es una VM aparte, las instrucciones del servidor indican a los agentes que lleguen a un servidor de desarrollo de su máquina por la IP de LAN de la máquina (hostname -I), nunca por localhost. La historia completa está en El navegador integrado.
Nota: En un cliente enriquecido, el flujo browser-MCP de los agentes puede ir por la conexión SSH, de modo que un agente remoto maneja el panel de navegador que ves en local. Consulta Acceso remoto y clientes.
OAuth para los servidores MCP que añades
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, la Bromure AC Suite, es otra superficie de automatización — útil para la orquestación y para herramientas de capturas de pantalla que necesitan ID de ventana. Apunta a application "Bromure Agentic Coding" desde Editor de Scripts o con 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(el perfil entero; se conserva el id; los secretos guardados se reintegran en 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). - Ventanas de máquina —
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 la ventana de una máquina:
osascript -e 'tell application "Bromure Agentic Coding" to open ac session "Web app"'
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 una máquina. Las automatizaciones se crean y gestionan desde el tablero de automatizaciones (⇧⌘A, o la sección Automatizaciones de la barra lateral), y los agentes pueden gestionar las automatizaciones de su propia máquina mediante el servidor MCP automations de arriba. Toda la función — disparadores, programaciones, encadenamiento, la pantalla de inyección obligatoria, el historial de ejecuciones — está documentada en Automatizaciones. Esta sección cubre la superficie del plano de control: manejar las automatizaciones mediante la API, responder a los prompts de decisión que puede plantear un arranque desatendido y cómo funciona el consentimiento en un terminal adjunto.
Controlar las automatizaciones a través de la API
| 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. |
POST /automation-runs/<run-id>/acknowledge | Descarta una ejecución fallida o bloqueada de la columna Requiere atención del tablero. |
GET /automation-runs/<run-id>/transcript | La transcripción archivada de una ejecución terminada (base64). |
Responder a los prompts pendientes
Algunas decisiones de ciclo de vida — la oferta de actualización de la imagen base, un disco que no supera su comprobación de arranque, una alerta de compromiso, un borrado por compromiso — aparecen normalmente como una alerta local. Cuando no hay nadie frente al Mac para responder (un agente sin interfaz, o un arranque pedido por un cliente enriquecido remoto), se ponen en cola: aparecen en GET /state bajo pendingPrompts (cada uno con id, profileID, title, message y etiquetas de botones) 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":"Remind me later"}'
Pasa como choice una de las propias etiquetas de botón del prompt. Si ningún cliente responde antes de que caduque el prompt, se resuelve con su alternativa segura — nunca la opción destructiva (una alerta de compromiso, por ejemplo, recurre a apagar la VM). Si no hay ningún cliente conectado, recurre a ella de inmediato. Un cliente enriquecido muestra estos prompts como alertas normales.
Nota: Las automatizaciones, las delegaciones y otros arranques desatendidos nunca esperan a un prompt. Un arranque que necesitaría tu respuesta — una máquina marcada como comprometida, o un modelo local que aún se está descargando — se rechaza, con un motivo claro en el historial de la ejecución («The workspace is marked compromised — start it yourself to confirm the wipe.»). Una máquina suspendida cuyo estado guardado no se puede restaurar arranca de cero.
Consentimiento en terminales adjuntas
Mientras un terminal está adjunto de forma interactiva a una máquina — mediante vm exec -it, vm attach o un attach por SSH — los prompts de aprobación del lado del anfitrión (uso de credenciales y similares) se muestran en tu terminal, no dentro del invitado. El prompt dice 🔒 Bromure — approval required con opciones numeradas y Choice [1-N] (Enter or timeout = deny). Enter, tiempo agotado, EOF o desconectarse significan denegar, así que un invitado comprometido nunca puede falsificar una aprobación. Después se vuelve a dibujar el tmux del invitado.
Endpoints de depuración (BROMURE_DEBUG_CLAUDE)
Abrir la app con BROMURE_DEBUG_CLAUDE definido levanta la barrera de depuración de la API de automatización TCP, de modo que las rutas de la fila central de la tabla de autenticación también funcionan por TCP, incluidas estas rutas de depuración (siempre disponibles en el socket de control, salvo que se indique lo contrario):
GET /debug/ui-shot?path=…&which=…— la app dibuja su propia ventana en un PNG (sin necesidad del permiso de Grabación de pantalla) y devuelve un volcado de los marcos de las 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 indicador también deja que los secretos pasen tal cual por los puentes JSON de perfiles de AppleScript y MCP, y lo requieren las herramientas de VM de bromure-ac mcp --debug. GET /health informa de debugEnabled para que sepas en qué modo está la app.
Advertencia:
BROMURE_DEBUG_CLAUDEelimina la barrera de seguridad que normalmente mantieneexec, el control de las VM y los secretos de perfil en bruto 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 que no sea de loopback — eso expondría acceso completo a la shell de las VM, secretos sin ocultar y capturas de ventanas a cualquiera que pueda llegar al puerto. Es distinto deBROMURE_AC_DEBUG(registro de eventos en stderr) y deBROMURE_CLI_DEBUG(diagnóstico del socket de la CLI), que son interruptores de registro inofensivos.