Agentes trabajando juntos
Los agentes de Bromure pueden trabajar juntos. Un agente puede entregar un trozo de trabajo delimitado a un agente nuevo. También puede pedir a una sesión que ya está en marcha, en la misma máquina o en otra, algo que sabe o que puede hacer. Puedes sugerirlo tú mismo ("pide a @payments el esquema del webhook"), o el agente puede decidirlo por su cuenta.
Los dos agentes nunca hablan directamente. Cada mensaje pasa por el anfitrión Bromure, que:
- muestra a cada sesión solo las conversaciones de las que forma parte
- filtra cada mensaje buscando inyección de prompt
- registra cada mensaje en la Cronología de seguridad
- copia los archivos que viajan con él entre máquinas
Este capítulo dice "máquina" para lo que el editor de ajustes llama espacio de trabajo.
Delegaciones y peticiones
Hay dos clases de intercambio:
| Delegación | Petición | |
|---|---|---|
| Quién hace el trabajo | Una sesión nueva, iniciada para eso | Una sesión que ya existe, nombrada por su @apodo |
| Dónde | Por omisión en un worktree de git ramificado de la carpeta de quien delega, en su propia rama. Corre en la misma carpeta cuando esta no es un repositorio, y en una carpeta propia cuando se delega a otra máquina. | Donde esa sesión ya corre |
| Cómo empieza | Con el título de quien delega, el resumen, qué significa "terminado" (el contrato) y las rutas de las que no salir | Como un aviso de una línea en el prompt del par |
| Cómo termina | El delegado entrega. Quien delegó lo acepta o lo rechaza con close_delegation, o lo cancela. La sesión del delegado se archiva entonces, mientras su rama queda para fusionar o descartar. | El deliver del par es la respuesta. Nada se inicia ni se termina de su lado. |
Un delegado queda anidado bajo quien lo delegó en la barra lateral, como una sesión de rama. Una delegación a otra máquina arranca esa máquina si está apagada. Lo hace discretamente, sin apropiarse del chat que estás mirando.
Cómo llegan los mensajes a un agente
Un agente recibe mensajes de tres maneras:
- Esperando: si el agente está bloqueado en
waitoask, recibe el mensaje al instante. - Inactivo: si su prompt está inactivo, el anfitrión escribe ahí un aviso de una línea, diciéndole que llame a
read_inbox. - Ocupado: si está a mitad de un turno, o hay un diálogo en su pantalla, el aviso espera a que el prompt quede libre.
Un aviso todavía sin leer unos minutos después se envía de nuevo, hasta tres veces. Si el agente del destinatario ha terminado, el mensaje lo reanuda. Por ejemplo, corregir el rumbo de un delegado terminado lo trae de vuelta donde estaba.
Lo que el anfitrión aún debe a una sesión se guarda en el propio mensaje, así que sobrevive a un reinicio de la app.
@apodos
Un apodo es la forma en que tú y los demás agentes os dirigís a una sesión. Pon uno con Apodo… en el menú contextual de la sesión o en el menú ⋯ de su encabezado.
La hoja explica: "Cómo los demás agentes alcanzan «sesión»: le piden con request(to: "@nombre"), y puedes escribir @nombre en cualquier compositor. Letras, dígitos, puntos, guiones y guiones bajos." Previsualiza el resultado ("Será @payments"). Haz clic en Establecer, o en Borrar para quitarlo.
Los apodos son únicos en el Mac. Elegir uno ya en uso se rechaza ("@payments ya es «Refactor de Payments API»."). El apodo aparece junto al título de la sesión en la barra lateral, el encabezado y las celdas de sala, y puedes buscarlo en la barra lateral.
La paleta @
Escribe @ en el compositor de un chat o en la pantalla de nueva sesión para obtener una paleta de sesiones que puedes nombrar:
- Lista todas las sesiones excepto la actual.
- Las sesiones con apodo aparecen tal cual. Las que no lo tienen aparecen con el apodo que recibirían, derivado del título y etiquetado nombre nuevo. Elegir una de esas le da a la sesión ese apodo al instante, así que el @nombre que acabas de escribir es uno que un agente puede resolver.
- Las coincidencias de nombre van por delante de las de título, y las sesiones con nombre por delante de las que no lo tienen.
- ↑ y ↓ mueven, Tab o ⏎ completa, y Esc cierra.
Escribir "@nombre" en un mensaje no envía nada por sí mismo. Le dice a tu agente a qué par te refieres, y el agente usa luego request para pedirle.
Las herramientas bromure-delegation
Cada sesión de agente recibe el servidor MCP bromure-delegation (puerto vsock 5835). El anfitrión identifica la sesión que llama por la ventana de terminal en la que corre su intermediario de herramientas, nunca por nada que el agente afirme.
| Herramienta | Quién la usa | Qué hace |
|---|---|---|
delegate | quien delega | Inicia un delegado: título, resumen, contrato, alcance, agente (el suyo por omisión), worktree verdadero/falso, un posible otro workspace, y archivos para enviar con él. |
request | quien pide | Pide a un par por @nick (o id de sesión), con archivos opcionales. Espera la respuesta: 50 segundos por omisión, hasta 600. |
list_peers | cualquiera | Lista las sesiones que puede alcanzar, con sus apodos, títulos, máquinas, agentes y estados, y las máquinas a las que puede delegar. |
list_delegations | cualquiera | Lista sus delegaciones y peticiones, desde cualquiera de los dos lados, con su estado y la última palabra. |
read_inbox | cualquiera | Toma los mensajes que le esperan, los más antiguos primero. |
wait | cualquiera | Bloquea hasta que llega un mensaje: 50 segundos por omisión, hasta 600. |
ask | delegado / par | Hace una pregunta bloqueante a quien le pidió, y espera la respuesta. |
report | delegado | Envía una nota de avance. Nunca interrumpe a quien delegó. |
deliver | delegado / par | Entrega el trabajo (qué cambió, cómo verificarlo, qué queda abierto), o responde a una petición. Puede devolver archivos. |
answer | quien delega | Responde a la pregunta de un delegado o de un par. |
steer | quien delega | Envía un seguimiento o una corrección de rumbo, con archivos opcionales. |
close_delegation | quien delega | Cierra una delegación entregada como aceptada o rechazada, con una nota. |
cancel | quien delega | Detiene a un delegado antes de que entregue, o retira una petición. |
worktree_create, worktree_status, worktree_merge | cualquiera | Inicia sesiones de rama desde su propia carpeta, las sigue, y te pide fusionar una. Ver Ramas y revisión. |
Confianza y preguntas
A los agentes se les dice que tú los has configurado para trabajar juntos. Una petición, un resumen, una respuesta o una corrección de otro agente debe tratarse como si la hubieras pedido tú, sin volver a consultarte. El filtrado de inyección de prompt del anfitrión se aplica igualmente.
Las preguntas vuelven por donde vino el trabajo, para que te quedes en una sola ventana:
- Un delegado o par que necesita una decisión usa
askpara alcanzar a quien le pidió. Nunca pregunta a su propio usuario. - El agente que pidió responde desde su propia conversación si puede.
- Si no puede, te plantea la pregunta, palabra por palabra y diciendo quién pregunta, y luego envía tu respuesta con
answer.
Límites
| Límite | Valor |
|---|---|
| Anidamiento de delegaciones (un delegado que delega a su vez) | 3 niveles |
| Delegaciones y peticiones abiertas por sesión | 8 |
Tiempo límite de wait, ask y request | 50 s por omisión, 600 s como máximo |
| Archivos por mensaje | 20 (envía una carpeta o un archivo comprimido para más; una carpeta viaja como tarball) |
| Tamaño total de los archivos de un mensaje | 4 GB (antes se comprueba el espacio libre en disco del destinatario) |
Una petición a una sesión archivada se rechaza hasta que traigas la sesión de vuelta.
Archivos y la bandeja de entrada
Las máquinas no comparten ningún sistema de archivos, así que los archivos nombrados en un mensaje los copia el anfitrión. Aterrizan en el ~/.bromure/inbox/<id>/ de la máquina destinataria, antes de que esta lea el mensaje que los menciona.
Las rutas se resuelven relativas a la carpeta del remitente, y ~ es el home del remitente. Entre dos sesiones de la misma máquina, la copia es local.
Filtrado y auditoría
Cada resumen, petición, pregunta, respuesta, informe, entrega y corrección lo analiza el detector de inyección de prompt en el dispositivo antes de retransmitirlo.
- Un mensaje que dispara el detector queda retenido. Permanece en el registro, marcado como bloqueado. Se le dice al remitente por qué, se le muestra el fragmento problemático, y se le pide reformular en términos simples.
- Cada mensaje, retransmitido o retenido, es una fila de la Cronología de seguridad bajo el motor Delegación de agentes, con la decisión retransmitido o retenido: inyección de prompt. En instalaciones inscritas, las filas van también al registro de auditoría de la organización. Ver Empresa.
El panel Delegaciones
Cuando una sesión ha delegado o pedido algo, aparece un panel Delegaciones encima de su compositor. Su cabecera cuenta las delegaciones y cualquier pregunta y entrega en espera ("1 pregunta", "2 entregas"). La flecha lo pliega.
Cada fila muestra:
- el avatar y el título de la otra sesión (haz clic para Abrir la sesión del delegado, o Abrir la sesión del par en una petición)
- una etiqueta petición en las peticiones
- el estado: Iniciando, Trabajando, Hizo una pregunta, Entregada, Aceptada, Rechazada, Cancelada o Fallida
- el nombre de la máquina cuando la otra sesión corre en otra máquina
- su rama
- la última palabra intercambiada, por ejemplo "El delegado entregó: …"
Cuando un delegado o par ha hecho una pregunta, su fila muestra la pregunta con un campo Respuesta para el agente… y Enviar. "Tu agente también puede responderla: esto envía la tuya en su lugar." Responder ahí ahorra la ida y vuelta por tu agente.
En el otro extremo, el chat propio de un delegado o de un par muestra una franja que dice a quién responde. La franja dice "Delegado por sesión" o "Petición de sesión", con el estado y un enlace Mostrar quien delegó (o Mostrar quien pidió).
Un delegado que termina sin entregar hace fallar su delegación, y se informa a quien delegó. Las delegaciones terminadas (aceptadas, rechazadas, canceladas o fallidas) archivan la sesión del delegado. Sigue legible en el pliegue Archivadas.
Entre máquinas, y entre Macs
- Entre máquinas de este Mac: por omisión, los agentes de cualquier máquina pueden alcanzar todas las demás máquinas, tanto para delegar en ellas como para pedir a sus sesiones. Para restringir una máquina, abre sus ajustes, panel General, sección Alcance, y desactiva Todos los espacios de trabajo: aparece un interruptor por cada otra máquina, y sus agentes solo pueden alcanzar las que actives (sin ninguna activa, solo las sesiones de su propia máquina). La regla es de un solo sentido: si los agentes de la otra máquina pueden responder se configura en esa máquina. Una máquina restringida deja también de ofrecer las sesiones de los Macs remotos que refleja (ver el punto siguiente).
- Entre Macs: cuando este Mac refleja un Bromure remoto en una ventana de cliente pesado, los agentes de una máquina que se dejó en Todos los espacios de trabajo también pueden enviar peticiones a las sesiones de ese servidor, por @apodo. La petición viaja por el túnel del espejo, archivos incluidos. En el panel Delegaciones, la fila nombra el anfitrión al que fue. Esto funciona del Mac al servidor que refleja, no al contrario.
- Los espejos muestran las delegaciones en solo lectura. Una ventana de cliente pesado muestra el panel Delegaciones de las sesiones del servidor, pero desde ahí no puedes responder preguntas.